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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYOFWEEKDAYDAYOFYEAR-
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_expressioni intervallet . Veckorna börjar denWEEKDAY.datetimesedan före årets förstaWEEKDAYär i vecka 0. Giltiga värden förWEEKDAYärSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYochSATURDAY. -
ISOWEEK: Återger ISO 8601 veckonumret fördatetime_expression.ISOWEEKbörjar på måndag. Returvärdena ligger i intervallet . Den förstaISOWEEKi varje ISO-år börjar på måndagen före den första torsdagen i det gregorianska kalenderåret. MONTHQUARTERYEAR-
ISOYEAR: Återger ISO 8601-veckanummeråret, vilket är det gregorianska kalenderåret som innehåller torsdagen i den vecka somdate_expressiontillhör. DATETIME
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 HOURtidsdelen.
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. EXTRACTberä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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Motsvarar 7DAYs. MONTHQUARTERYEAR
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Motsvarar 7DAYs. MONTHQUARTERYEAR
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 DATETIMEs 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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
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,FRIDAYochSATURDAY. -
ISOWEEK: Använder ISO 8601 veckogränser. ISO-veckor börjar på måndag. MONTHQUARTERYEAR-
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 avDATETIMEs. 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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYWEEK-
WEEK(<WEEKDAY>): Trunkerardatetime_expressiontill den föregående veckogränsen, där veckorna börjar påWEEKDAY. Giltiga värden förWEEKDAYärSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYochSATURDAY. -
ISOWEEK: Trunkerardatetime_expressiontill föregående veckogränsISO 8601.ISOWEEKbörjar på måndag. Den förstaISOWEEKi varje ISO-år innehåller den första torsdagen i motsvarande gregorianska kalenderår. Varjedate_expressiontidigare än detta kommer att trunkeras till föregående måndag. MONTHQUARTERYEAR-
ISOYEAR: Trunkerardatetime_expressiontill 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_expression2015-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:
YEARQUARTERMONTH-
WEEK. Motsvarar 7DAYs. -
WEEK(<WEEKDAY>).<WEEKDAY>representerar veckans startdag.Giltiga värden ärSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYochSATURDAY. -
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
MondayochFebruaryä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
%Foch%Yåret, så det tidigare elementet har företräde framför det senare. Se beskrivningarna av%s,%Coch%yiSupported 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 STRINGlitteral 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: