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
DATETIME
pomocí hodnot INT64reprezentujících rok, měsíc, den, hodinu, minutu a sekundu. - Konstruuje objekt
DATETIME
pomocí objektu DATE a nepovinného objektu TIME. - Konstruuje objekt
DATETIME
pomocí 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:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
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_expression
v rozsahu . Týdny začínajíWEEKDAY
.datetime
data před prvníWEEKDAY
v roce jsou v týdnu 0. Platné hodnoty proWEEKDAY
jsouSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
aSATURDAY
. -
ISOWEEK
: Vrátí číslo týdne ISO 8601 prodatetime_expression
.ISOWEEK
Začíná v pondělí. Vrácené hodnotyjsou v rozsahu . PrvníISOWEEK
každého roku ISO začíná vpondělí před prvním čtvrtkem gregoriánského kalendářního roku. MONTH
QUARTER
YEAR
-
ISOYEAR
: DATE
TIME
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
part
DATE
, vrací objektDATE
. - Pokud je
part
TIME
, 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. EXTRACT
vypočí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
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Ekvivalent 7DAY
s. MONTH
QUARTER
YEAR
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
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Ekvivalent 7DAY
s. MONTH
QUARTER
YEAR
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
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
: Tato část data začíná nedělí. -
WEEK(<WEEKDAY>)
: Tato část data začínáWEEKDAY
. Platné hodnoty proWEEKDAY
jsouSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
aSATURDAY
. -
ISOWEEK
: Používá hranice týdnů podle ISO 8601. Týdny ISO začínají pondělím. MONTH
QUARTER
YEAR
-
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 rozsahuDATETIME
s. 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
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
WEEK(<WEEKDAY>)
: Zkracujedatetime_expression
na předcházející hranici týdne, kde týdny začínajíWEEKDAY
. Platné hodnoty proWEEKDAY
jsouSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
aSATURDAY
. -
ISOWEEK
: Zkrátídatetime_expression
na předcházející hranici týdneISO 8601.ISOWEEK
začíná v pondělí. PrvníISOWEEK
každého roku ISO obsahuje prvníčtvrtek odpovídajícího gregoriánského kalendářního roku. Jakýkolidate_expression
dříve se zkrátí na předcházející pondělí. MONTH
QUARTER
YEAR
-
ISOYEAR
: Zkrátí sedatetime_expression
na 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_expression
2015-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
:
YEAR
QUARTER
MONTH
-
WEEK
. Ekvivalent 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
představuje počáteční den v týdnu. platné hodnoty jsouSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
aSATURDAY
. -
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
Monday
aFebruary
,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ězciDATETIME
jsou 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
%F
i%Y
ovlivňují rok, takže dřívější prvek má přednost před pozdějším. Viz popis%s
,%C
a%y
v čá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:
.