Datotidsfunktioner i Standard SQL

author
9 minutes, 25 seconds Read

BigQuery understøtter følgende DATETIME funktioner.

Alle output formateres automatisk i henhold til ISO 8601, idet dato og klokkeslæt adskilles med en T.

CURRENT_DATETIME

CURRENT_DATETIME()

Beskrivelse

Returnerer det aktuelle tidspunkt som et DATETIME objekt.

Denne funktion understøtter en valgfri timezone parameter.Se Timezone-definitioner for oplysninger om, hvordan du angiver en tidszone.

Returnerer datatype

DATETIME

Eksempel

SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+

DATETIME

Beskrivelse

  1. Konstruerer et DATETIME-objekt ved hjælp af INT64-værdier, der repræsenterer år, måned, dag, time, minut og sekund.
  2. Konstruerer et DATETIME-objekt ved hjælp af et DATE-objekt og et valgfrit TIME-objekt.
  3. Konstruerer et DATETIME-objekt ved hjælp af et TIMESTAMP-objekt. Det understøtter en valgfri parameter til at angive en tidszone. Hvis der ikke er angivet nogen tidszone, anvendes standardtidszonen, UTC.

Returnerer datatype

DATETIME

Eksempel

EXTRACT

EXTRACT(part FROM datetime_expression)

Beskrivelse

Returnerer en værdi, der svarer til den angivne part fra en leveret datetime_expression.

Godkendte part-værdier er:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK: returnerer ugenummeret for datoen i intervallet . Ugerne begynder med søndag, og datoer før den første søndag i året er i uge 0.
  • WEEK(<WEEKDAY>): Returnerer ugenummeret for datetime_expression i intervallet . Ugerne begynder den WEEKDAY.datetimedage før den første WEEKDAY i året er i uge 0. Gyldigeværdier for WEEKDAY er SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, og SATURDAY.
  • ISOWEEK: Returnerer ISO 8601 ugenummeret for datetime_expression. ISOWEEKs begynder om mandagen. Returværdierne er i intervallet . Den første ISOWEEK i hvert ISO-år begynder den mandag før den første torsdag i det gregorianske kalenderår.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Returnerer ISO 8601-ugenummereringsåret, som er det gregorianske kalenderår, der indeholder den torsdag i den uge, som date_expression tilhører.
  • DATE
  • DATE
  • TIME

Returnerede værdier afkorter tidsperioder af lavere orden. Når der f.eks. udtrækkes sekunder, trunker EXTRACT værdierne for millisekunder og mikrosekunder.

Returnerer datatype

INT64, undtagen i følgende tilfælde:

  • Hvis part er DATE, returneres et DATE-objekt.
  • Hvis part er TIME, returneres et TIME-objekt.

Eksempler

I det følgende eksempel returnerer EXTRACT en værdi, der svarer til HOURtidsdelen.

SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+

I det følgende eksempel returnerer EXTRACT værdier, der svarer til forskelligetidsdele fra en kolonne af datotidspunkter.

I det følgende eksempel falder datetime_expression på en søndag. EXTRACTberegner den første kolonne ved hjælp af uger, der begynder søndag, og den beregner den anden kolonne ved hjælp af uger, der begynder mandag.

DATETIME_ADD

DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)

Beskrivelse

Tilføjer int64_expression enheder af part til DATETIME-objektet.

DATETIME_ADD understøtter følgende værdier for part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK. Svarer til 7 DAYs.
  • MONTH
  • QUARTER
  • YEAR

Særlig håndtering er påkrævet for delene MONTH (måned), QUARTER (kvartal) og YEAR (år), nårdatoen er på (eller tæt på) den sidste dag i måneden. Hvis den resulterende måned har færre dage end den oprindelige DATETIME’s dag, er resultatets dag den sidste dag i den nye måned.

Returnering af datatype

DATETIME

Eksempel

DATETIME_SUB

DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)

Beskrivelse

Subtraherer int64_expression enheder af part fra DATETIME.

DATETIME_SUB understøtter følgende værdier for part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK. Svarer til 7 DAYs.
  • MONTH
  • QUARTER
  • YEAR

Særlig håndtering er påkrævet for MONTH, QUARTER og YEAR dele, nårdatoen er på (eller tæt på) den sidste dag i måneden. Hvis den resulterende måned har færre dage end den oprindelige DATETIMEs dag, er den resulterende dag den sidste dag i den nye måned.

Returnerer datatype

DATETIME

Eksempel

DATETIME_DIFF

DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)

Beskrivelse

Returnerer antallet af hele angivne part intervaller mellem toDATETIME objekter ( – datetime_expression_b).Hvis det første DATETIME er tidligere end det andet, er resultatet negativt. Der opstår en fejl, hvis beregningen overskrider resultattypen, f.eks. hvis forskellen i mikrosekunder mellem de to DATETIME-objekter ville overskride enINT64-værdi.

DATETIME_DIFF understøtter følgende værdier for part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK: Denne datodel begynder på søndag.
  • WEEK(<WEEKDAY>): Denne datodel begynder den WEEKDAY. Gyldige værdier forWEEKDAY er SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY og SATURDAY.
  • ISOWEEK: Bruger ISO 8601-ugegrænser. ISO-uger begynder om mandagen.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Bruger ISO 8601-ugenummereringsårsgrænsen. ISO-årsgrænsen er mandagen i den første uge, hvis torsdag hører til det tilsvarende gregorianske kalenderår.

Returnering af datatype

INT64

Eksempel

Eksemplet ovenfor viser resultatet af DATETIME_DIFF for to DATETIMEs, der har 24 timers mellemrum. DATETIME_DIFF med del WEEK returnerer 1, fordiDATETIME_DIFF tæller antallet af delgrænser i dette interval afDATETIMEs. Hver WEEK begynder søndag, så der er én delgrænse mellem lørdag 2017-10-14 00:00:00 og søndag 2017-10-15 00:00:00.

Det følgende eksempel viser resultatet af DATETIME_DIFF for to datoer i forskellige år. DATETIME_DIFF med datodelen YEAR returnerer 3, fordi den tæller antallet af gregorianske kalenderårsgrænser mellem de toDATETIMEs. DATETIME_DIFF med datodel ISOYEAR returnerer 2, fordi denne anden DATETIME hører til ISO-året 2015. Den første torsdag i 2015-kalenderåret var 2015-01-01, så ISO-året 2015 begynder den foregående mandag, 2014-12-29.

Det følgende eksempel viser resultatet af DATETIME_DIFF for to dage i uoverensstemmelse. Den første dato falder på en mandag, og den anden dato falder på en søndag. DATETIME_DIFF med datodel WEEK returnerer 0, fordi denne timepart bruger uger, der begynder søndag. DATETIME_DIFF med datodelWEEK(MONDAY) giver 1. DATETIME_DIFF med datodelISOWEEK returnerer også 1, fordi ISO-uger begynder mandag.

DATETIME_TRUNC

DATETIME_TRUNC(datetime_expression, part)

Description

Truncates a DATETIME object to the granularity of part.

DATETIME_TRUNC understøtter følgende værdier for part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): Truncates datetime_expression til den foregående ugegrænse, hvor ugerne begynder på WEEKDAY. Gyldige værdier for WEEKDAY erSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY ogSATURDAY.
  • ISOWEEK: Trunker datetime_expression til den forudgåendeISO 8601-ugegrænse. ISOWEEKbegynder mandag. Den første ISOWEEK i hvert ISO-år indeholder den første torsdag i det tilsvarende gregorianske kalenderår. Ethvert date_expression tidligere end dette vil blive afkortet til den foregående mandag.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Afkortes datetime_expression til den foregående ISO 8601-ugeregistreringsårs-grænsen. ISO-årsgrænsen er mandagen i den første uge, hvis torsdag hører til det tilsvarende gregorianske kalenderår.

Returner datatype

DATETIME

Eksempler

I det følgende eksempel falder den oprindelige DATETIME på en søndag. Da part er WEEK(MONDAY), returnerer DATE_TRUNC DATETIME for den forudgående mandag.

I det følgende eksempel er den oprindelige datetime_expression i det gregorianske kalenderår 2015. Men DATETIME_TRUNC med ISOYEAR dato deltruncates datetime_expression til begyndelsen af ISO-året, ikke det gregorianske kalenderår. Den første torsdag i kalenderåret 2015 var2015-01-01, så ISO-året 2015 begynder den foregående mandag, 2014-12-29. Derfor er ISO-årsgrænsen forud for datetime_expression2015-06-15 00:00:00:00 2014-12-29.

FORMAT_DATETIME

FORMAT_DATETIME(format_string, datetime_expression)

Beskrivelse

Formaterer et DATETIME objekt i overensstemmelse med den angivne format_string. SeStøttede formatelementer til DATETIME for en liste over formatelementer, som denne funktion understøtter.

Returnerer datatype

STRING

Eksempler

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)

Beskrivelse

Returnerer den sidste dag fra et datotidsudtryk, der indeholder datoen.Dette bruges almindeligvis til at returnere den sidste dag i måneden.

Du kan valgfrit angive den datodel, som den sidste dag returneres for.Hvis denne parameter ikke bruges, er standardværdien MONTH.LAST_DAY understøtter følgende værdier for date_part:

  • YEAR
  • YEAR
  • QUARTER
  • MONTH
  • WEEK. Svarer til 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> repræsenterer den første ugedag.Gyldige værdier er SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY og SATURDAY.
  • ISOWEEK. Bruger ISO 8601-ugegrænser. ISO-uger begynder mandag.
  • ISOYEAR. Bruger ISO 8601 ugenummereringsårsgrænsen.ISO-årsgrænsen er mandagen i den første uge, hvis torsdag hører til det tilsvarende gregorianske kalenderår.

Returnerer datatype

DATE

Eksempel

Disse returnerer begge den sidste dag i måneden:

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 |+------------+

Dette returnerer den sidste dag i året:

SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+

Dette returnerer den sidste dag i ugen for en uge, der starter på en søndag:

SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+

Dette returnerer den sidste ugedag for en uge, der starter om mandagen:

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)

Description

Konverterer en strengrepræsentation af en datotid til etDATETIME objekt.

format_string indeholder de formatelementer, der definerer, hvordan datetime_string formateres. Hvert element idatetime_string skal have et tilsvarende element i format_string. Placeringen af hvert element i format_string skal svare til placeringen af hvert element i datetime_string.

Formatstrengen understøtter fuldt ud de fleste formatelementer, undtagen%Q, %a, %A,%g, %G, %j, %P, %u, %U, %V, %w og %W.

PARSE_DATETIME analyserer string i henhold til følgende regler:

  • Uspecificerede felter. Ethvert uspecificeret felt initialiseres fra1970-01-01 00:00:00.0. Hvis f.eks. året er uspecificeret, er det som standard 1970.
  • Navne, der er ufølsomme over for store og små bogstaver. Navne, som f.eks. Monday og February, er ufølsomme over for store og små bogstaver.
  • Whitespace. Et eller flere på hinanden følgende hvide mellemrum i formatstrengen passer til nul eller flere på hinanden følgende hvide mellemrum i strengenDATETIME. Foran og bagvedliggende hvide mellemrum i DATETIME-strengen er altid tilladt, selv om de ikke er i formatstrengen.
  • Formatpræcedens. Når to eller flere formatelementer har overlappende oplysninger, har det sidste generelt forrang for alle tidligere elementer, med visse undtagelser. F.eks. påvirker både %F og %Y året, så det tidligere element har forrang for det senere. Se beskrivelserne af %s, %C og %y iSupported Format Elements For DATETIME.

Return Data Type

DATETIME

Eksempler

De følgende eksempler analyserer et STRING literal som etDATETIME.

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 |+---------------------+

Det følgende eksempel analyserer et STRING bogstav, der indeholder en dato i et naturligt sprogformat, som enDATETIME.

SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+

Støttede formatelementer for DATETIME

Medmindre andet er angivet, understøtter DATETIME-funktioner, der bruger formatstrenge, følgende elementer:

Similar Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.