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:
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 fordatetime_expression
i intervallet . Ugerne begynder denWEEKDAY
.datetime
dage før den førsteWEEKDAY
i året er i uge 0. Gyldigeværdier forWEEKDAY
erSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, ogSATURDAY
. -
ISOWEEK
: Returnerer ISO 8601 ugenummeret fordatetime_expression
.ISOWEEK
s begynder om mandagen. Returværdierne er i intervallet . Den førsteISOWEEK
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, somdate_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
erDATE
, returneres etDATE
-objekt. - Hvis
part
erTIME
, returneres etTIME
-objekt.
Eksempler
I det følgende eksempel returnerer EXTRACT
en værdi, der svarer til HOUR
tidsdelen.
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. EXTRACT
beregner 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 7DAY
s. 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 7DAY
s. 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 DATETIME
s 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 denWEEKDAY
. Gyldige værdier forWEEKDAY
erSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ogSATURDAY
. -
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 DATETIME
s, der har 24 timers mellemrum. DATETIME_DIFF
med del WEEK
returnerer 1, fordiDATETIME_DIFF
tæller antallet af delgrænser i dette interval afDATETIME
s. 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 toDATETIME
s. 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>)
: Truncatesdatetime_expression
til den foregående ugegrænse, hvor ugerne begynder påWEEKDAY
. Gyldige værdier forWEEKDAY
erSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ogSATURDAY
. -
ISOWEEK
: Trunkerdatetime_expression
til den forudgåendeISO 8601-ugegrænse.ISOWEEK
begynder mandag. Den førsteISOWEEK
i hvert ISO-år indeholder den første torsdag i det tilsvarende gregorianske kalenderår. Ethvertdate_expression
tidligere end dette vil blive afkortet til den foregående mandag. MONTH
QUARTER
YEAR
-
ISOYEAR
: Afkortesdatetime_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_expression
2015-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 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
repræsenterer den første ugedag.Gyldige værdier erSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ogSATURDAY
. -
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.
Monday
ogFebruary
, 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
%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: