BigQuery podporuje následující DATETIME funkce.
Všechny výstupy jsou automaticky formátovány podle ISO 8601, datum a čas jsou odděleny znakem aT.
CURRENT_DATETIME
CURRENT_DATETIME()
Popis
Vrací aktuální čas jako objekt DATETIME.
Tato funkce podporuje volitelný parametr timezone.Informace o zadání časového pásma naleznete v části Definice časových pásem.
Vrací datový typ
DATETIME
Příklad
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Popis
- Konstruuje objekt
DATETIMEpomocí hodnot INT64reprezentujících rok, měsíc, den, hodinu, minutu a sekundu. - Konstruuje objekt
DATETIMEpomocí objektu DATE a nepovinného objektu TIME. - Konstruuje objekt
DATETIMEpomocí objektu TIMESTAMP. Podporuje volitelný parametr pro zadání časového pásma. Pokud není zadána časová zóna, použije se výchozí časová zóna UTC.
Vrátí datový typ
DATETIME
Příklad
EXTRACT
EXTRACT(part FROM datetime_expression)
Popis
Vrátí hodnotu, která odpovídá zadanému part z dodaného datetime_expression.
Povolené hodnoty part jsou:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYOFWEEKDAYDAYOFYEAR-
WEEK: Vrátí číslo týdne data v rozsahu . Týdny začínají nedělí a data před první nedělí v roce jsou v týdnu 0. -
WEEK(<WEEKDAY>): Vrátí číslo týdnedatetime_expressionv rozsahu . Týdny začínajíWEEKDAY.datetimedata před prvníWEEKDAYv roce jsou v týdnu 0. Platné hodnoty proWEEKDAYjsouSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYaSATURDAY. -
ISOWEEK: Vrátí číslo týdne ISO 8601 prodatetime_expression.ISOWEEKZačíná v pondělí. Vrácené hodnotyjsou v rozsahu . PrvníISOWEEKkaždého roku ISO začíná vpondělí před prvním čtvrtkem gregoriánského kalendářního roku. MONTHQUARTERYEAR-
ISOYEAR: DATETIME
Vrácené hodnoty zkracují časová období nižšího řádu. Například při extrakci sekund EXTRACT zkrátí hodnoty milisekund a mikrosekund.
Vrací datový typ
INT64, kromě následujících případů:
- Pokud je
partDATE, vrací objektDATE. - Pokud je
partTIME, vrací objektTIME.
Příklady
V následujícím příkladu EXTRACT vrací hodnotu odpovídající části HOURčasu.
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
V následujícím příkladu EXTRACT vrací hodnoty odpovídající různým částem času ze sloupce datumů.
V následujícím příkladu datetime_expression připadá na neděli. EXTRACTvypočítá první sloupec pomocí týdnů, které začínají v neděli, a druhý sloupec vypočítá pomocí týdnů, které začínají v pondělí.
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
Popis
Přidá int64_expression jednotek part k objektu DATETIME.
DATETIME_ADD Podporuje následující hodnoty pro part:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Ekvivalent 7DAYs. MONTHQUARTERYEAR
Speciální zpracování je nutné pro části MĚSÍC, ČTVRTEK a ROK, pokud je datum v poslední den měsíce (nebo v jeho blízkosti). Pokud má výsledný měsíc méně dní než den původního DATETIME, pak je výsledný den posledním dnem nového měsíce.
Vrátí datový typ
DATETIME
Příklad
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
Popis
Odčítá int64_expression jednotek part od DATETIME.
DATETIME_SUB Podporuje následující hodnoty pro part:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Ekvivalent 7DAYs. MONTHQUARTERYEAR
Speciální zacházení je nutné pro části MONTH, QUARTER a YEAR, pokud je datum v poslední den měsíce (nebo v jeho blízkosti). Pokud má výsledný měsíc méně dní než původní den DATETIME, pak je výsledný den posledním dnem nového měsíce.
Vrátí datový typ
DATETIME
Příklad
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
Popis
Vrátí počet celých zadaných part intervalů mezi dvěma objektyDATETIME (datetime_expression_a – datetime_expression_b). pokud je první DATETIME dřívější než druhý, je výstup záporný. Vyhodí chybu, pokud výpočet přeteče typ výsledku, například pokud by rozdíl v mikrosekundách mezi dvěma objekty DATETIME přetekl hodnotuINT64.
DATETIME_DIFF Podporuje následující hodnoty pro part:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK: Tato část data začíná nedělí. -
WEEK(<WEEKDAY>): Tato část data začínáWEEKDAY. Platné hodnoty proWEEKDAYjsouSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYaSATURDAY. -
ISOWEEK: Používá hranice týdnů podle ISO 8601. Týdny ISO začínají pondělím. MONTHQUARTERYEAR-
ISOYEAR: Používá hranici roku pro číslování týdnů podle ISO 8601. Hranice roku ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného gregoriánského kalendářního roku.
Vrátit datový typ
INT64
Příklad
Výše uvedený příklad ukazuje výsledek DATETIME_DIFF pro dvě DATETIME, které jsou od sebe vzdáleny 24 hodin. DATETIME_DIFF s částí WEEK vrátí 1, protožeDATETIME_DIFF počítá počet hranic částí v tomto rozsahuDATETIMEs. Každý WEEK začíná v neděli, takže mezi sobotou 2017-10-14 00:00:00 a nedělí 2017-10-15 00:00:00 je jedna hranice dílů.
Následující příklad ukazuje výsledek DATETIME_DIFF pro dvě data bez rozdílu roku. DATETIME_DIFF s částí data YEAR vrací 3, protože počítá počet hranic gregoriánského kalendářního roku mezi dvěma DATETIME. DATETIME_DIFF s datovou částí ISOYEAR vrátí 2, protože druhý DATETIME patří do ISO roku 2015. První čtvrtek kalendářního roku 2015 byl 2015-01-01, takže ISO rok 2015 začíná v předcházejícípondělí, 2014-12-29.
Následující příklad ukazuje výsledek DATETIME_DIFF pro dva dny bez střídání. První datum připadá na pondělí a druhé datum připadá na neděli. DATETIME_DIFF s datovou částí WEEK vrátí 0, protože tato časová část používá týdny, které začínají nedělí. DATETIME_DIFF s částí dataWEEK(MONDAY) vrací 1. DATETIME_DIFF s datovou částíISOWEEK rovněž vrací 1, protože týdny ISO začínají v pondělí.
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Popis
Zkracuje objekt DATETIME na granularitu part.
DATETIME_TRUNC Podporuje následující hodnoty pro part:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYWEEK-
WEEK(<WEEKDAY>): Zkracujedatetime_expressionna předcházející hranici týdne, kde týdny začínajíWEEKDAY. Platné hodnoty proWEEKDAYjsouSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYaSATURDAY. -
ISOWEEK: Zkrátídatetime_expressionna předcházející hranici týdneISO 8601.ISOWEEKzačíná v pondělí. PrvníISOWEEKkaždého roku ISO obsahuje prvníčtvrtek odpovídajícího gregoriánského kalendářního roku. Jakýkolidate_expressiondříve se zkrátí na předcházející pondělí. MONTHQUARTERYEAR-
ISOYEAR: Zkrátí sedatetime_expressionna předcházející hranici roku číslování týdnů ISO 8601. Hranicí roku ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného roku gregoriánského kalendáře.
Vrátit datový typ
DATETIME
Příklady
V následujícím příkladu připadá původní DATETIME na neděli. Protožepart je WEEK(MONDAY), DATE_TRUNC vrátí DATETIME pro předcházející pondělí.
V následujícím příkladu je původní datetime_expression v gregoriánském kalendářním roce 2015. Avšak DATETIME_TRUNC s datem ISOYEAR zkrátí datetime_expression na začátek roku ISO, nikoliv na rok gregoriánského kalendáře. První čtvrtek kalendářního roku 2015 byl2015-01-01, takže ISO rok 2015 začíná předchozím pondělím, 2014-12-29. Proto hranice ISO roku předcházející datetime_expression2015-06-15 00:00:00 je 2014-12-29.
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
Popis
Formátuje objekt DATETIME podle zadaného format_string. Seznam formátovacích prvků, které tato funkce podporuje, viz Podporované formátovací prvky pro DATETIME.
Vrací datový typ
STRING
Příklady
SELECT FORMAT_DATETIME("%c", DATETIME "2008-12-25 15:30:00") AS formatted;+--------------------------+| formatted |+--------------------------+| Thu Dec 25 15:30:00 2008 |+--------------------------+
SELECT FORMAT_DATETIME("%b-%d-%Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec-25-2008 |+-------------+
SELECT FORMAT_DATETIME("%b %Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec 2008 |+-------------+
LAST_DAY
LAST_DAY(datetime_expression)
Popis
Vrací poslední den z výrazu datetime, který obsahuje datum.Běžně se používá pro vrácení posledního dne v měsíci.
Můžete volitelně zadat část data, pro kterou se vrací poslední den. pokud není tento parametr použit, je výchozí hodnota MONTH.LAST_DAY podporuje následující hodnoty pro date_part:
YEARQUARTERMONTH-
WEEK. Ekvivalent 7DAYs. -
WEEK(<WEEKDAY>).<WEEKDAY>představuje počáteční den v týdnu. platné hodnoty jsouSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYaSATURDAY. -
ISOWEEK. Používá hranice týdnů podle ISO 8601. Týdny ISO začínají v pondělí. -
ISOYEAR. Používá hranici roku pro číslování týdnů podle ISO 8601. Hranicí roku podle ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného gregoriánského kalendářního roku.
Vrací datový typ
DATE
Příklad
Obojí vrací poslední den měsíce:
SELECT LAST_DAY(DATETIME '2008-11-25', MONTH) AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
SELECT LAST_DAY(DATETIME '2008-11-25') AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
Vrací poslední den roku:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
Vrací poslední den týdne pro týden, který začíná nedělí:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
Vrací poslední den týdne pro týden, který začíná v pondělí:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(MONDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-16 |+------------+
PARSE_DATETIME
PARSE_DATETIME(format_string, datetime_string)
Popis
Převede řetězcovou reprezentaci data na objektDATETIME.
format_string Obsahuje formátovací prvky, které definují způsob formátování datetime_string. Každý prvek v datetime_string musí mít odpovídající prvek v format_string. Umístění každého prvku v format_string musí odpovídat umístěníkaždého prvku v datetime_string.
Formátovací řetězec plně podporuje většinu formátovacích prvků s výjimkou%Q, %a, %A,%g, %G, %j, %P, %u, %U, %V, %w a %W.
PARSE_DATETIME analyzuje string podle následujících pravidel:
- Neurčená pole. Jakékoli nespecifikované pole je inicializováno od
1970-01-01 00:00:00.0. Například pokud je rok nespecifikovaný, pak je výchozí hodnota1970. - Názvy nerozlišující velká a malá písmena. U názvů, jako jsou
MondayaFebruary,se nerozlišují velká a malá písmena. - Bílá místa. Jedna nebo více po sobě jdoucích bílých mezer ve formátovacím řetězci se shoduje s nulou nebo více po sobě jdoucími bílými mezerami v řetězci
DATETIME. Přední a koncové bílé mezery v řetězciDATETIMEjsou vždy povoleny, i když nejsou ve formátovacím řetězci. - Přednost formátu. Pokud mají dva nebo více formátovacích prvků překrývající seinformace, poslední z nich má obecně přednost před všemi dřívějšími, s některýmivýjimkami. Například
%Fi%Yovlivňují rok, takže dřívější prvek má přednost před pozdějším. Viz popis%s,%Ca%yv částiPodporované formátovací prvky pro DATETIME.
Vrátit datový typ
DATETIME
Příklady
Následující příklady analyzují literál STRING jakoDATETIME.
SELECT PARSE_DATETIME('%Y-%m-%d %H:%M:%S', '1998-10-18 13:45:55') AS datetime;+---------------------+| datetime |+---------------------+| 1998-10-18T13:45:55 |+---------------------+
SELECT PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', '8/30/2018 2:23:38 PM') AS datetime+---------------------+| datetime |+---------------------+| 2018-08-30T14:23:38 |+---------------------+
Následující příklad analyzuje STRING literálobsahující datum ve formátu přirozeného jazyka jakoDATETIME.
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
Podporované formátovací prvky pro DATETIME
Není-li uvedeno jinak, funkce DATETIME, které používají formátovací řetězce, podporují následující prvky:
.