Datumtidsfunktioner i Standard SQL

author
9 minutes, 50 seconds Read

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

  1. Konstruerar ett DATETIME-objekt med hjälp av INT64-värden som representerar år, månad, dag, timme, minut och sekund.
  2. Konstruerar ett DATETIME-objekt med hjälp av ett DATE-objekt och ett valfritt TIME-objekt.
  3. 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ör datetime_expression i intervallet . Veckorna börjar den WEEKDAY.datetimesedan före årets första WEEKDAY är i vecka 0. Giltiga värden för WEEKDAY är SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY och SATURDAY.
  • ISOWEEK: Återger ISO 8601 veckonumret för datetime_expression. ISOWEEK börjar på måndag. Returvärdena ligger i intervallet . Den första ISOWEEK 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 som date_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 är DATE, returnerar man ett DATE-objekt.
  • Om part är TIME, returnerar man ett TIME-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:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK. Motsvarar 7 DAYs.
  • 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 7 DAYs.
  • 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 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:

  • 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 är SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY och SATURDAY.
  • 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 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:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): Trunkerar datetime_expression till den föregående veckogränsen, där veckorna börjar på WEEKDAY. Giltiga värden för WEEKDAY ärSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY ochSATURDAY.
  • ISOWEEK: Trunkerar datetime_expression till föregående veckogränsISO 8601. ISOWEEKbörjar på måndag. Den första ISOWEEK i varje ISO-år innehåller den första torsdagen i motsvarande gregorianska kalenderår. Varje date_expression tidigare än detta kommer att trunkeras till föregående måndag.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Trunkerar datetime_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_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:

  • YEAR
  • QUARTER
  • MONTH
  • WEEK. Motsvarar 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> representerar veckans startdag.Giltiga värden är SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY och SATURDAY.
  • 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ån1970-01-01 00:00:00.0. Om t.ex. året är ospecificerat är det som standard 1970.
  • Namn som är okänsliga för stora och små bokstäver. Namn som Monday och February ä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ängenDATETIME. Ledande och avslutande vitrymder i DATETIME-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 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:

Similar Posts

Lämna ett svar

Din e-postadress kommer inte publiceras.