Funcții datetime în Standard SQL

author
10 minutes, 24 seconds Read

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

  1. Construiește un obiect DATETIME folosind valori INT64reprezentând anul, luna, ziua, ora, minutul și secunda.
  2. Construiește un obiect DATETIME care utilizează un obiect DATE și un obiect opțional TIME.
  3. 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ânii datetime_expression din intervalul . Săptămânile încep la WEEKDAY.datetimesau datele anterioare primei WEEKDAY din an se află în săptămâna 0. Valorile valide pentru WEEKDAY sunt SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY și SATURDAY.
  • ISOWEEK: Returnează numărul săptămânal ISO 8601 al datetime_expression. ISOWEEKs începe luni. Valorile returnate sunt cuprinse în intervalul . Primul ISOWEEK 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 parte date_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 este DATE, returnează un obiect DATE.
  • Dacă part este TIME, returnează un obiect TIME.

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ă. EXTRACTcalculează 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 7 DAYs.
  • 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 7 DAYs.
  • 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_adatetime_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 pe WEEKDAY. Valorile valide pentruWEEKDAY sunt SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY și SATURDAY.
  • 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 deDATETIMEs. 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ăDATETIMEs. 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 la WEEKDAY. Valorile valide pentru WEEKDAY suntSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY șiSATURDAY.
  • ISOWEEK: Trunchiază datetime_expression până la limita săptămânii precedenteISO 8601. ISOWEEKîncepe luni. Primul ISOWEEK din fiecare an ISO conține prima zi de joi a anului calendaristic gregorian corespunzător. Orice date_expressionmai 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_expression2015-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 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> reprezintă ziua de început a săptămânii. valorile valide sunt SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, și SATURDAY.
  • 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 la1970-01-01 00:00:00.0. De exemplu, dacă anul este nespecificat, atunci acesta este inițializat la 1970.
  • Nume care nu țin cont de majuscule și minuscule. Numele, cum ar fi Monday și February,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 șirulDATETIME. Spațiile albe la început și la sfârșit în șirul DATETIME 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 STRINGconț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:

.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată.