BigQuery suportă următoarele DATETIME
funcții.
Toate ieșirile sunt formatate automat conform ISO 8601, separând data și ora cu unT
.
CURRENT_DATETIME
CURRENT_DATETIME()
Descriere
Întoarce ora curentă sub forma unui obiect DATETIME
.
Această funcție acceptă un parametru opțional timezone
.A se vedea Definiții de fus orar pentru informații privind modul de specificare a unui fus orar.
Returnează tipul de date
DATETIME
Exemplu
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Descriere
- Construiește un obiect
DATETIME
folosind valori INT64reprezentând anul, luna, ziua, ora, minutul și secunda. - Construiește un obiect
DATETIME
care utilizează un obiect DATE și un obiect opțional TIME. - Construiește un obiect
DATETIME
care utilizează un obiect TIMESTAMP. Suportă un parametru opțional pentru a specifica un fus orar. Dacă nu este specificat nici un fus orar, se utilizează fusul orar implicit, UTC.
Returnează tipul de date
DATETIME
Exemplu
EXTRACT
EXTRACT(part FROM datetime_expression)
Descriere
Returnează o valoare care corespunde la part
specificat dintr-un datetime_expression
furnizat.
Valorile part
admise sunt:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
WEEK
: Returnează numărul săptămânii din data din intervalul . Săptămânile încep cu duminica, iar datele anterioare primei duminici a anului se află în săptămâna 0. -
WEEK(<WEEKDAY>)
: Returnează numărul săptămâniidatetime_expression
din intervalul . Săptămânile încep laWEEKDAY
.datetime
sau datele anterioare primeiWEEKDAY
din an se află în săptămâna 0. Valorile valide pentruWEEKDAY
suntSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
șiSATURDAY
. -
ISOWEEK
: Returnează numărul săptămânal ISO 8601 aldatetime_expression
.ISOWEEK
s începe luni. Valorile returnate sunt cuprinse în intervalul . PrimulISOWEEK
al fiecărui an ISO începe în lunea dinaintea primei zile de joi a anului calendaristic gregorian. MONTH
QUARTER
YEAR
-
ISOYEAR
: Returnează anul de numerotare a săptămânii ISO 8601, care este anul calendaristic gregorian care conține ziua de joi a săptămânii din care face partedate_expression
. DATE
TIME
Valorile returnate trunchează perioadele de timp de ordin inferior. De exemplu, atunci când se extrag secunde, EXTRACT
trunchiază valorile de milisecunde și microsecunde.
Tip de date returnate
INT64
, cu excepția următoarelor cazuri:
- Dacă
part
esteDATE
, returnează un obiectDATE
. - Dacă
part
esteTIME
, returnează un obiectTIME
.
Exemple
În exemplul următor, EXTRACT
returnează o valoare corespunzătoare părții de timp HOUR
.
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
În exemplul următor, EXTRACT
returnează valori corespunzătoare unor părți de timp diferite dintr-o coloană de date.
În exemplul următor, datetime_expression
cade într-o duminică. EXTRACT
calculează prima coloană folosind săptămânile care încep duminica și calculează a doua coloană folosind săptămânile care încep lunea.
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
Descriere
Adaugă int64_expression
unități de part
la obiectul DATETIME
.
DATETIME_ADD
suportă următoarele valori pentru part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Echivalent cu 7DAY
s. MONTH
QUARTER
YEAR
Este necesară o manipulare specială pentru părțile LUNA, TRIMESTRUL și ANUL atunci când data este în (sau aproape de) ultima zi a lunii. Dacă luna rezultată are mai puține zile decât ziua DATETIME-ului original, atunci ziua rezultată este ultima zi a noii luni.
Tipul de date de retur
DATETIME
Exemplu
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
Descriere
Substractează int64_expression
unități de part
din DATETIME
.
DATETIME_SUB
suportă următoarele valori pentru part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Echivalent cu 7DAY
s. MONTH
QUARTER
YEAR
Sunt necesare manipulări speciale pentru piesele MONTH
, QUARTER
și YEAR
atunci când data este în (sau aproape de) ultima zi a lunii. În cazul în care luna rezultată are mai puține zile decât ziua DATETIME
originală, atunci ziua rezultată este ultima zi a noii luni.
Return Data Type
DATETIME
Exemplu
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
Descriere
Returnează numărul de intervale întregi specificate part
între două obiecteDATETIME
(datetime_expression_a
– datetime_expression_b
).Dacă primul DATETIME
este mai devreme decât al doilea,rezultatul este negativ. Aruncă o eroare în cazul în care calculul depășește tipul de rezultat, de exemplu dacă diferența de microsecunde între cele două obiecte DATETIME
ar depăși o valoare INT64
.
DATETIME_DIFF
suportă următoarele valori pentru part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
: Această parte de dată începe duminică. -
WEEK(<WEEKDAY>)
: Această parte de dată începe peWEEKDAY
. Valorile valide pentruWEEKDAY
suntSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
șiSATURDAY
. -
ISOWEEK
: Folosește granițele săptămânale ISO 8601. Săptămânile ISO încep luni. MONTH
QUARTER
YEAR
-
ISOYEAR
: Folosește limita anului de numerotare a săptămânilor ISO 8601. Limita anului ISO este ziua de luni a primei săptămâni a cărei zi de joi aparține anului calendaristic gregorian corespunzător.
Return Data Type
INT64
Exemplu
Exemplul de mai sus arată rezultatul lui DATETIME_DIFF
pentru două DATETIME
care au o diferență de 24 de ore. DATETIME_DIFF
cu piesa WEEK
returnează 1 deoareceDATETIME_DIFF
numără numărul de limite de piese în acest interval deDATETIME
s. Fiecare WEEK
începe duminica, deci există o limită de parte între sâmbătă, 2017-10-14 00:00:00
și duminică, 2017-10-15 00:00:00
.
Exemplul următor arată rezultatul lui DATETIME_DIFF
pentru două date de ani indiferenți. DATETIME_DIFF
cu partea de dată YEAR
returnează 3, deoarece numără numărul de limite de ani calendaristici gregoriani între cele douăDATETIME
s. DATETIME_DIFF
cu partea de dată ISOYEAR
returnează 2 pentru că acest al doilea DATETIME
aparține anului ISO 2015. Prima zi de joi a anului calendaristic 2015 a fost 2015-01-01, deci anul ISO 2015 începe în lunea precedentă, 2014-12-29.
Exemplul următor arată rezultatul lui DATETIME_DIFF
pentru două zile de insuccesiune. Prima dată cade într-o zi de luni, iar a doua dată cade într-o zi de duminică. DATETIME_DIFF
cu partea de dată WEEK
returnează 0, deoarece această parte de timp utilizează săptămâni care încep duminica. DATETIME_DIFF
cu partea de datăWEEK(MONDAY)
returnează 1. DATETIME_DIFF
cu partea de datăISOWEEK
returnează, de asemenea, 1 deoarece săptămânile ISO încep luni.
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Descriere
Truncționează un obiect DATETIME
la granularitatea de part
.
DATETIME_TRUNC
acceptă următoarele valori pentru part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
WEEK(<WEEKDAY>)
: Trunchiazădatetime_expression
până la limita săptămânii precedente, unde săptămânile încep laWEEKDAY
. Valorile valide pentruWEEKDAY
suntSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
șiSATURDAY
. -
ISOWEEK
: Trunchiazădatetime_expression
până la limita săptămânii precedenteISO 8601.ISOWEEK
începe luni. PrimulISOWEEK
din fiecare an ISO conține prima zi de joi a anului calendaristic gregorian corespunzător. Oricedate_expression
mai devreme decât aceasta va fi trunchiat la lunea precedentă. MONTH
QUARTER
YEAR
-
ISOYEAR
: Trunchiazădatetime_expression
la limita precedentă a anului de numerotare a săptămânii ISO 8601. Limita anului ISO este ziua de luni a primei săptămâni a cărei zi de joi aparține anului calendaristic gregorian corespunzător.
Return Data Type
DATETIME
Exemple
În următorul exemplu, DATETIME
originalul DATETIME
cade într-o duminică. Deoarece part
este WEEK(MONDAY)
, DATE_TRUNC
returnează DATETIME
pentru lunea precedentă.
În următorul exemplu, datetime_expression
originalul datetime_expression
este în anul calendaristic gregorian 2015. Cu toate acestea, DATETIME_TRUNC
cu partea de dată ISOYEAR
trunchiază datetime_expression
la începutul anului ISO, nu al anului calendaristic gregorian. Prima zi de joi a anului calendaristic 2015 a fost2015-01-01, deci anul ISO 2015 începe în lunea precedentă, 2014-12-29. Prin urmare, limita anului ISO care precede datetime_expression
2015-06-15 00:00:00 este 2014-12-29.
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
Descriere
Formată un obiect DATETIME
în conformitate cu format_string
specificat. ConsultațiSupported Format Elements For DATETIMEpentru o listă a elementelor de format pe care această funcție le acceptă.
Return Data Type
STRING
Exemple
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)
Description
Returnează ultima zi dintr-o expresie datetime care conține data.Acesta este utilizat în mod obișnuit pentru a returna ultima zi a lunii.
Puteți specifica opțional partea de dată pentru care se returnează ultima zi.Dacă acest parametru nu este utilizat, valoarea implicită este MONTH
.LAST_DAY
acceptă următoarele valori pentru date_part
:
YEAR
QUARTER
MONTH
-
WEEK
. Echivalent cu 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
reprezintă ziua de început a săptămânii. valorile valide suntSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, șiSATURDAY
. -
ISOWEEK
. Folosește limitele săptămânii ISO 8601. Săptămânile ISO încep luni. -
ISOYEAR
. Utilizează limita anului de numerotare a săptămânilor ISO 8601. Limita anului ISO este ziua de luni a primei săptămâni a cărei zi de joi aparține anului calendaristic gregorian corespunzător.
Tip de date returnate
DATE
Exemplu
Acestea două returnează ultima zi a lunii:
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 |+------------+
Aceasta returnează ultima zi a anului:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
Aceasta returnează ultima zi a săptămânii pentru o săptămână care începe într-o duminică:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
Aceasta returnează ultima zi a săptămânii pentru o săptămână care începe luni:
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)
Descriere
Convertește o reprezentare de tip șir de caractere a unei date într-un obiectDATETIME
.
format_string
conține elementele de format care definesc modul în care este formatat datetime_string
. Fiecare element dindatetime_string
trebuie să aibă un element corespunzător în format_string
. Locația fiecărui element din format_string
trebuie să corespundă cu locația fiecărui element din datetime_string
.
Șirul de format suportă în totalitate majoritatea elementelor de format, cu excepția %Q
, %a
, %A
,%g
, %G
, %j
, %P
, %u
, %U
, %V
, %w
și %W
.
PARSE_DATETIME
analizează string
în conformitate cu următoarele reguli:
- Câmpuri nespecificate. Orice câmp nespecificat este inițializat de la
1970-01-01 00:00:00.0
. De exemplu, dacă anul este nespecificat, atunci acesta este inițializat la1970
. - Nume care nu țin cont de majuscule și minuscule. Numele, cum ar fi
Monday
șiFebruary
,sunt insensibile la majuscule și minuscule. - Spațiu alb. Unul sau mai multe spații albe consecutive în șirul de format se potrivește cu zero sau mai multe spații albe consecutive în șirul
DATETIME
. Spațiile albe la început și la sfârșit în șirulDATETIME
sunt întotdeauna permise, chiar dacă nu se află în șirul de format. - Precedența formatului. Atunci când două sau mai multe elemente de format au informații care se suprapun, ultimul are, în general, prioritate față de cele anterioare, cu unele excepții. De exemplu, atât
%F
, cât și%Y
afectează anul, astfel încât cel mai vechi element îl înlocuiește pe cel mai recent. A se vedea descrierile lui%s
,%C
și%y
înSupported Format Elements For DATETIME.
Return Data Type
DATETIME
Exemple
Următoarele exemple analizează un literal STRING
ca un DATETIME
.
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 |+---------------------+
Exemplul următor analizează un literal STRING
conținând o dată într-un format în limbaj natural ca unDATETIME
.
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
Elemente de format acceptate pentru DATETIME
Dacă nu se specifică altfel, funcțiile DATETIME
care utilizează șiruri de formate acceptă următoarele elemente:
.