BigQuery har stöd för följande DATETIME
-funktioner.
Alla utdata formateras automatiskt enligt ISO 8601, där datum och tid separeras med ett T
.
CURRENT_DATETIME
CURRENT_DATETIME()
Beskrivning
Returnerar aktuell tid som ett DATETIME
-objekt.
Denna funktion har stöd för en valfri timezone
-parameter.Se Timezone-definitioner för information om hur du anger en tidszon.
Returnerar datatyp
DATETIME
Exempel
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Beskrivning
- Konstruerar ett
DATETIME
-objekt med hjälp av INT64-värden som representerar år, månad, dag, timme, minut och sekund. - Konstruerar ett
DATETIME
-objekt med hjälp av ett DATE-objekt och ett valfritt TIME-objekt. - Konstruerar ett
DATETIME
-objekt med hjälp av ett TIMESTAMP-objekt. Det har stöd för en valfri parameter för att ange en tidszon. Om ingen tidszon anges används standardtidszonen UTC.
Returnerar datatyp
DATETIME
Exempel
EXTRACT
EXTRACT(part FROM datetime_expression)
Beskrivning
Returnerar ett värde som motsvarar den angivna part
från en levererad datetime_expression
.
Tillåtna part
värden är:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
WEEK
: Återger veckonumret för datumet i intervallet . Veckor börjar med söndag, och datum före årets första söndag ligger i vecka 0. -
WEEK(<WEEKDAY>)
: Återger veckonumret fördatetime_expression
i intervallet . Veckorna börjar denWEEKDAY
.datetime
sedan före årets förstaWEEKDAY
är i vecka 0. Giltiga värden förWEEKDAY
ärSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ochSATURDAY
. -
ISOWEEK
: Återger ISO 8601 veckonumret fördatetime_expression
.ISOWEEK
börjar på måndag. Returvärdena ligger i intervallet . Den förstaISOWEEK
i varje ISO-år börjar på måndagen före den första torsdagen i det gregorianska kalenderåret. MONTH
QUARTER
YEAR
-
ISOYEAR
: Återger ISO 8601-veckanummeråret, vilket är det gregorianska kalenderåret som innehåller torsdagen i den vecka somdate_expression
tillhör. DATE
TIME
Returnerade värden trunker tidsperioder av lägre ordning. När man till exempel extraherar sekunder trunker EXTRACT
värdena för millisekunder och mikrosekunder.
Returnerar datatyp
INT64
, utom i följande fall:
- Om
part
ärDATE
, returnerar man ettDATE
-objekt. - Om
part
ärTIME
, returnerar man ettTIME
-objekt.
Exempel
I följande exempel returnerar EXTRACT
ett värde som motsvarar HOUR
tidsdelen.
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
I följande exempel returnerar EXTRACT
värden som motsvarar olikatidsdelar från en kolumn med datumtider.
I följande exempel faller datetime_expression
på en söndag. EXTRACT
beräknar den första kolumnen med hjälp av veckor som börjar på söndag, och den beräknar den andra kolumnen med hjälp av veckor som börjar på måndag.
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
Beskrivning
Lägger till int64_expression
enheter av part
till DATETIME
objektet.
DATETIME_ADD
stöder följande värden för part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Motsvarar 7DAY
s. MONTH
QUARTER
YEAR
Särskild hantering krävs för delar av MONTH, QUARTER och YEAR närdatum är på (eller nära) den sista dagen i månaden. Om den resulterande månaden har färre dagar än den ursprungliga DATETIMEs dag är resultatets dag den sista dagen i den nya månaden.
Returnerad datatyp
DATETIME
Exempel
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
Beskrivning
Subtraherar int64_expression
enheter av part
från DATETIME
.
DATETIME_SUB
stöder följande värden för part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Motsvarar 7DAY
s. MONTH
QUARTER
YEAR
Särskild hantering krävs för MONTH
, QUARTER
och YEAR
delar närdatat är på (eller nära) den sista dagen i månaden. Om den resulterande månaden har färre dagar än den ursprungliga DATETIME
s dag, är resultatets dag den sista dagen i den nya månaden.
Returnerar datatyp
DATETIME
Exempel
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
Beskrivning
Returnerar antalet hela specificerade part
-intervall mellan tvåDATETIME
-objekt ( – datetime_expression_b
).Om den första DATETIME
är tidigare än den andra,är resultatet negativt. Kastar ett fel om beräkningen överskrider resultattypen, t.ex. om skillnaden i mikrosekunder mellan de två DATETIME
-objekten skulle överskrida ett INT64
-värde.
DATETIME_DIFF
stöder följande värden för part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
: Den här datodelens datum börjar på söndag. -
WEEK(<WEEKDAY>)
: Denna datumdel börjar påWEEKDAY
. Giltiga värden förWEEKDAY
ärSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ochSATURDAY
. -
ISOWEEK
: Använder ISO 8601 veckogränser. ISO-veckor börjar på måndag. MONTH
QUARTER
YEAR
-
ISOYEAR
: Använder ISO 8601 årsgränsen för veckonummerering. ISO-årsgränsen är måndagen i den första veckan vars torsdag tillhör motsvarande gregorianska kalenderår.
Returnerar datatyp
INT64
Exempel
Exemplet ovan visar resultatet av DATETIME_DIFF
för två DATETIME
med 24 timmars mellanrum. DATETIME_DIFF
med delen WEEK
ger 1 eftersomDATETIME_DIFF
räknar antalet delgränser i detta intervall avDATETIME
s. Varje WEEK
börjar på söndag, så det finns en delgräns mellan lördag 2017-10-14 00:00:00
och söndag 2017-10-15 00:00:00
.
Följande exempel visar resultatet av DATETIME_DIFF
för två datum med olika årtal. DATETIME_DIFF
med datumdelen YEAR
ger 3 eftersom denräknar antalet gränser för det gregorianska kalenderåret mellan de tvåDATETIME
. DATETIME_DIFF
med datumdelen ISOYEAR
ger 2 eftersom denna andra DATETIME
tillhör ISO-året 2015. Den första torsdagen i kalenderåret 2015 var 2015-01-01, så ISO-året 2015 börjar den föregående måndagen, 2014-12-29.
Följande exempel visar resultatet av DATETIME_DIFF
för två dagar i eftersläpning. Det första datumet infaller på en måndag och det andra datumet infaller på en söndag. DATETIME_DIFF
med datumdelen WEEK
ger 0 eftersom denna tidsdel använder veckor som börjar på söndag. DATETIME_DIFF
med datumdelenWEEK(MONDAY)
ger 1. DATETIME_DIFF
med datumdelenISOWEEK
returnerar också 1 eftersom ISO-veckor börjar på måndag.
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Beskrivning
Trunkar ett DATETIME
-objekt till granulariteten part
.
DATETIME_TRUNC
stöder följande värden för part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
WEEK(<WEEKDAY>)
: Trunkerardatetime_expression
till den föregående veckogränsen, där veckorna börjar påWEEKDAY
. Giltiga värden förWEEKDAY
ärSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ochSATURDAY
. -
ISOWEEK
: Trunkerardatetime_expression
till föregående veckogränsISO 8601.ISOWEEK
börjar på måndag. Den förstaISOWEEK
i varje ISO-år innehåller den första torsdagen i motsvarande gregorianska kalenderår. Varjedate_expression
tidigare än detta kommer att trunkeras till föregående måndag. MONTH
QUARTER
YEAR
-
ISOYEAR
: Trunkerardatetime_expression
till föregående ISO 8601 veckonummerering årsgräns. ISO-årsgränsen är måndagen i den första veckan vars torsdag tillhör motsvarande gregorianska kalenderår.
Returnerar datatyp
DATETIME
Exempel
I följande exempel infaller den ursprungliga DATETIME
på en söndag. Eftersom part
är WEEK(MONDAY)
returnerar DATE_TRUNC
DATETIME
för den föregående måndagen.
I följande exempel är det ursprungliga datetime_expression
i det gregorianska kalenderåret 2015. Men DATETIME_TRUNC
med datumdelen ISOYEAR
förkortar datetime_expression
till början av ISO-året, inte det gregorianska kalenderåret. Den första torsdagen i kalenderåret 2015 var2015-01-01, så ISO-året 2015 börjar på föregående måndag, 2014-12-29. Därför är ISO-årsgränsen före datetime_expression
2015-06-15 00:00:00 2014-12-29.
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
Beskrivning
Formaterar ett DATETIME
-objekt i enlighet med det angivna format_string
. SeStödda formatelement för DATETIME för en lista över formatelement som den här funktionen stöder.
Returnerar datatyp
STRING
Exempel
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)
Beskrivning
Returnerar den senaste dagen från ett datumtidsuttryck som innehåller datum.Detta används vanligen för att returnera månadens sista dag.
Du kan valfritt ange den datumdel för vilken den sista dagen returneras.Om den här parametern inte används är standardvärdet MONTH
.LAST_DAY
har stöd för följande värden för date_part
:
YEAR
QUARTER
MONTH
-
WEEK
. Motsvarar 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
representerar veckans startdag.Giltiga värden ärSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ochSATURDAY
. -
ISOWEEK
. Använder ISO 8601 veckogränser. ISO-veckor börjar på måndag. -
ISOYEAR
. Använder ISO 8601 veckonummereringens årsgräns.ISO årsgränsen är måndagen i den första veckan vars torsdag hör till motsvarande gregorianska kalenderår.
Returnerar datatyp
DATE
Exempel
De här returnerar båda månadens sista dag:
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 |+------------+
Detta returnerar årets sista dag:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
Detta returnerar veckans sista dag för en vecka som börjar på en söndag:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
Detta returnerar den sista veckodagen för en vecka som börjar på en måndag:
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)
Beskrivning
Konverterar en strängrepresentation av en datumtid till ettDATETIME
objekt.
format_string
innehåller formatelement som definierar hur datetime_string
formateras. Varje element idatetime_string
måste ha ett motsvarande element i format_string
. Placeringen av varje element i format_string
måste överensstämma med placeringen av varje element i datetime_string
.
Formatsträngen har fullt stöd för de flesta formatelement, utom för%Q
, %a
, %A
,%g
, %G
, %j
, %P
, %u
, %U
, %V
, %w
och %W
.
PARSE_DATETIME
analyserar string
enligt följande regler:
- Ospecificerade fält. Alla ospecificerade fält initialiseras från
1970-01-01 00:00:00.0
. Om t.ex. året är ospecificerat är det som standard1970
. - Namn som är okänsliga för stora och små bokstäver. Namn som
Monday
ochFebruary
är okänsliga för stor- och små bokstäver. - Vitt utrymme. Ett eller flera på varandra följande vitrymder i formatsträngen matchar noll eller flera på varandra följande vitrymder i strängen
DATETIME
. Ledande och avslutande vitrymder iDATETIME
-strängen tillåts alltid, även om de inte finns i formatsträngen. - Formatföreträde. När två eller flera formatelement har överlappande information har det sista formatelementet i allmänhet företräde framför tidigare formatelement, med vissa undantag. Till exempel påverkar både
%F
och%Y
året, så det tidigare elementet har företräde framför det senare. Se beskrivningarna av%s
,%C
och%y
iSupported Format Elements For DATETIME.
Return Data Type
DATETIME
Examples
Följande exempel parserar ett STRING
bokstavligt tal som ettDATETIME
.
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 |+---------------------+
Följande exempel analyserar en STRING
litteral som innehåller ett datum i ett naturligt språkformat som enDATETIME
.
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
Stödda formatelement för DATETIME
Men om inget annat anges har DATETIME
-funktioner som använder formatsträngar stöd för följande element: