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
- Konstruerer et
DATETIME-objekt ved hjælp af INT64-værdier, der repræsenterer år, måned, dag, time, minut og sekund. - Konstruerer et
DATETIME-objekt ved hjælp af et DATE-objekt og et valgfrit TIME-objekt. - 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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYOFWEEKDAYDAYOFYEAR-
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 fordatetime_expressioni intervallet . Ugerne begynder denWEEKDAY.datetimedage før den førsteWEEKDAYi året er i uge 0. Gyldigeværdier forWEEKDAYerSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, ogSATURDAY. -
ISOWEEK: Returnerer ISO 8601 ugenummeret fordatetime_expression.ISOWEEKs begynder om mandagen. Returværdierne er i intervallet . Den førsteISOWEEKi hvert ISO-år begynder den mandag før den første torsdag i det gregorianske kalenderår. MONTHQUARTERYEAR-
ISOYEAR: Returnerer ISO 8601-ugenummereringsåret, som er det gregorianske kalenderår, der indeholder den torsdag i den uge, somdate_expressiontilhører. DATEDATETIME
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
parterDATE, returneres etDATE-objekt. - Hvis
parterTIME, returneres etTIME-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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Svarer til 7DAYs. MONTHQUARTERYEAR
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Svarer til 7DAYs. MONTHQUARTERYEAR
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK: Denne datodel begynder på søndag. -
WEEK(<WEEKDAY>): Denne datodel begynder denWEEKDAY. Gyldige værdier forWEEKDAYerSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYogSATURDAY. -
ISOWEEK: Bruger ISO 8601-ugegrænser. ISO-uger begynder om mandagen. MONTHQUARTERYEAR-
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYDAYWEEK-
WEEK(<WEEKDAY>): Truncatesdatetime_expressiontil den foregående ugegrænse, hvor ugerne begynder påWEEKDAY. Gyldige værdier forWEEKDAYerSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYogSATURDAY. -
ISOWEEK: Trunkerdatetime_expressiontil den forudgåendeISO 8601-ugegrænse.ISOWEEKbegynder mandag. Den førsteISOWEEKi hvert ISO-år indeholder den første torsdag i det tilsvarende gregorianske kalenderår. Ethvertdate_expressiontidligere end dette vil blive afkortet til den foregående mandag. MONTHQUARTERYEAR-
ISOYEAR: Afkortesdatetime_expressiontil 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:
YEARYEARQUARTERMONTH-
WEEK. Svarer til 7DAYs. -
WEEK(<WEEKDAY>).<WEEKDAY>repræsenterer den første ugedag.Gyldige værdier erSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAYogSATURDAY. -
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 fra
1970-01-01 00:00:00.0. Hvis f.eks. året er uspecificeret, er det som standard1970. - Navne, der er ufølsomme over for store og små bogstaver. Navne, som f.eks.
MondayogFebruary, 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 strengen
DATETIME. Foran og bagvedliggende hvide mellemrum iDATETIME-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
%Fog%Yåret, så det tidligere element har forrang for det senere. Se beskrivelserne af%s,%Cog%yiSupported 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: