Datetime functies in Standard SQL

author
9 minutes, 15 seconds Read

BigQuery ondersteunt de volgende DATETIME functies.

Alle outputs worden automatisch geformatteerd volgens ISO 8601, waarbij datum en tijd worden gescheiden door eenT.

CURRENT_DATETIME

CURRENT_DATETIME()

Description

Retourneert de huidige tijd als een DATETIME object.

Deze functie ondersteunt een optionele timezone parameter.Zie Timezone-definities voor informatie over het opgeven van een tijdzone.

Return Data Type

DATETIME

Example

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

DATETIME

Description

  1. Constructs a DATETIME object using INT64 valuesrepresenting the year, month, day, hour, minute, and second.
  2. Construeert een DATETIME-object met behulp van een DATUM-object en een optioneel TIJD-object.
  3. Construeert een DATETIME-object met behulp van een TIMESTAMP-object. Het ondersteunt een optionele parameter om een tijdzone op te geven. Als geen tijdzone wordt opgegeven, wordt de standaardtijdzone UTC gebruikt.

Return Data Type

DATETIME

Example

EXTRACT

EXTRACT(part FROM datetime_expression)

Description

Returns een waarde die overeenkomt met de gespecificeerde part van een geleverde datetime_expression.

Toegestane part-waarden zijn:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK: Geeft als resultaat het weeknummer van de datum in het bereik . Weken beginnen met zondag, en datums voorafgaand aan de eerste zondag van het jaar zijn in week 0.
  • WEEK(<WEEKDAY>): Geeft als resultaat het weeknummer van datetime_expression in de reeks . Weken beginnen op WEEKDAY.datetimes voorafgaand aan de eerste WEEKDAY van het jaar zijn in week 0. Geldige waarden voor WEEKDAY zijn SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, en SATURDAY.
  • ISOWEEK: Geeft als resultaat het ISO 8601 weeknummer van de datetime_expression. ISOWEEKs beginnen op maandag. De teruggegeven waarden liggen in het bereik . De eerste ISOWEEK van elk ISO-jaar begint op de maandag vóór de eerste donderdag van het Gregoriaanse kalenderjaar.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Geeft als resultaat het ISO 8601-weeknummerjaar, dat wil zeggen het Gregoriaanse kalenderjaar dat de donderdag bevat van de week waartoe date_expression behoort.
  • DATE
  • TIME

De teruggezonden waarden vormen een afkapping van tijdperioden van een lagere orde. Bijvoorbeeld, bij het extraheren van seconden, EXTRACT worden de milliseconde en microseconde waarden afgekapt.

Gegevens type

INT64, behalve in de volgende gevallen:

  • Indien part DATE is, wordt een DATE object teruggezonden.
  • Indien part TIME is, wordt een TIME object teruggezonden.

Voorbeelden

In het volgende voorbeeld, EXTRACT retourneert een waarde die overeenkomt met het HOURtijddeel.

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

In het volgende voorbeeld, EXTRACT retourneert waarden die overeenkomen met verschillende tijddelen uit een kolom van datetijden.

In het volgende voorbeeld, datetime_expression valt op een zondag. EXTRACT berekent de eerste kolom met weken die op zondag beginnen, en de tweede kolom met weken die op maandag beginnen.

DATETIME_ADD

DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)

Beschrijving

Voegt int64_expression eenheden van part toe aan het object DATETIME.

DATETIME_ADD ondersteunt de volgende waarden voor part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK. Equivalent aan 7 DAYs.
  • MONTH
  • QUARTER
  • YEAR

Er is een speciale behandeling nodig voor de delen MAAND, KWARTIER en JAAR wanneer de datum op (of bijna) de laatste dag van de maand valt. Als de resulterende maand minder dagen heeft dan de dag van de oorspronkelijke DATETIME, dan is de resulterende dag de laatste dag van de nieuwe maand.

Teruggezonden gegevenstype

DATETIME

Voorbeeld

DATETIME_SUB

DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)

Beschrijving

Trekt int64_expression eenheden van part af van de DATETIME.

DATETIME_SUB ondersteunt de volgende waarden voor part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK. Equivalent aan 7 DAYs.
  • MONTH
  • QUARTER
  • YEAR

Er is een speciale behandeling nodig voor MONTH, QUARTER, en YEAR delen wanneer de datum op (of nabij) de laatste dag van de maand valt. Als de resulterende maand minder dagen heeft dan de dag van de oorspronkelijke DATETIME, dan is de resulterende dag de laatste dag van de nieuwe maand.

Return Data Type

DATETIME

Example

DATETIME_DIFF

DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)

Description

Retourneert het aantal hele gespecificeerde part intervallen tussen tweeDATETIME objecten (datetime_expression_adatetime_expression_b). Als de eerste DATETIME eerder is dan de tweede, is de uitvoer negatief. Geeft een foutmelding als de berekening het resultaatstype overschrijdt, bijvoorbeeld als het verschil in microseconden tussen de twee DATETIME-objecten eenINT64-waarde zou overschrijden.

DATETIME_DIFF ondersteunt de volgende waarden voor part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK: Dit datumgedeelte begint op zondag.
  • WEEK(<WEEKDAY>): Dit datumgedeelte begint op WEEKDAY. Geldige waarden voorWEEKDAY zijn SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, en SATURDAY.
  • ISOWEEK: Gebruikt ISO 8601 weekgrenzen. ISO-weken beginnen op maandag.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Gebruikt de ISO 8601-jaargrens voor de weeknummering. De ISO-jaargrens is de maandag van de eerste week waarvan de donderdag behoort tot het overeenkomstige Gregoriaanse kalenderjaar.

Return Data Type

INT64

Exemplaar

Het bovenstaande voorbeeld toont het resultaat van DATETIME_DIFF voor twee DATETIMEs die 24 uur uit elkaar liggen. DATETIME_DIFF met het onderdeel WEEK geeft 1 terug omdatDATETIME_DIFF het aantal onderdeelgrenzen telt in deze reeks vanDATETIMEs. Elke WEEK begint op zondag, dus er is één deellijn tussen zaterdag, 2017-10-14 00:00:00 en zondag, 2017-10-15 00:00:00.

Het volgende voorbeeld toont het resultaat van DATETIME_DIFF voor twee datums in verschillende jaren. DATETIME_DIFF met het datumdeel YEAR geeft 3 omdat het het aantal Gregoriaanse kalenderjaargrenzen telt tussen de tweeDATETIMEs. DATETIME_DIFF met het datumdeel ISOYEAR geeft 2 omdat deze tweede DATETIME behoort tot het ISO-jaar 2015. De eerste donderdag van het kalenderjaar 2015 was 2015-01-01, dus het ISO-jaar 2015 begint op de voorafgaandeMaandag, 2014-12-29.

Het volgende voorbeeld toont het resultaat van DATETIME_DIFF voor twee dagen insuccessie. De eerste datum valt op een maandag en de tweede datum valt op een zondag. DATETIME_DIFF met het datumdeel WEEK geeft 0 omdat dit tijddeel weken gebruikt die op zondag beginnen. DATETIME_DIFF met het datumdeelWEEK(MONDAY) geeft 1 terug. DATETIME_DIFF met het datumdeelISOWEEK geeft ook 1 omdat ISO-weken op maandag beginnen.

DATETIME_TRUNC

DATETIME_TRUNC(datetime_expression, part)

Description

Kort een DATETIME-object in tot de granulariteit van part.

DATETIME_TRUNC ondersteunt de volgende waarden voor part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): Truncates datetime_expression tot de voorafgaande weekgrens, waarbij de weken beginnen op WEEKDAY. Geldige waarden voor WEEKDAY zijnSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, enSATURDAY.
  • ISOWEEK: Truncates datetime_expression tot de voorgaandeISO 8601 weekgrens. ISOWEEKbegint op maandag. De eerste ISOWEEK van elk ISO-jaar bevat de eerste donderdag van het overeenkomstige Gregoriaanse kalenderjaar. Elke date_expression eerder dan deze wordt afgekapt op de voorafgaande maandag.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Afgekapt datetime_expression op de voorafgaande ISO 8601-weeknummering jaargrens. De ISO-jaargrens is de maandag van de eerste week waarvan de donderdag tot het overeenkomstige Gregoriaanse kalenderjaar behoort.

Return Data Type

DATETIME

Examples

In het volgende voorbeeld valt de oorspronkelijke DATETIME op een zondag. Omdat depart WEEK(MONDAY) is, geeft DATE_TRUNC de DATETIME voor de eerstvolgende maandag.

In het volgende voorbeeld is de oorspronkelijke datetime_expression in het Gregoriaanse kalenderjaar 2015. Echter, DATETIME_TRUNC met de ISOYEAR datum parttruncates de datetime_expression naar het begin van het ISO-jaar, niet hetGregoriaanse kalenderjaar. De eerste donderdag van het kalenderjaar 2015 was2015-01-01, dus het ISO-jaar 2015 begint op de voorafgaande maandag, 2014-12-29.Daarom is de ISO-jaargrens die voorafgaat aan de datetime_expression2015-06-15 00:00:00 is 2014-12-29.

FORMAT_DATETIME

FORMAT_DATETIME(format_string, datetime_expression)

Description

Vormt een DATETIME-object volgens de gespecificeerde format_string. Zie Ondersteunde opmaakelementen voor DATETIME voor een lijst met opmaakelementen die door deze functie worden ondersteund.

Return Data Type

STRING

Examples

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

Retourneert de laatste dag van een datetime expressie die de datum bevat.Dit wordt gewoonlijk gebruikt om de laatste dag van de maand terug te geven.

U kunt optioneel het datumgedeelte opgeven waarvoor de laatste dag wordt teruggegeven.Als deze parameter niet wordt gebruikt, is de standaardwaarde MONTH.LAST_DAY ondersteunt de volgende waarden voor date_part:

  • YEAR
  • QUARTER
  • MONTH
  • WEEK. Equivalent aan 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> staat voor de begindag van de week. Geldige waarden zijn SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, en SATURDAY.
  • ISOWEEK. Gebruikt ISO 8601 week grenzen. ISO weken beginnen op maandag.
  • ISOYEAR. Gebruikt de ISO 8601 weeknummering jaar grens. De ISO jaar grens is de maandag van de eerste week waarvan de donderdag behoort tot de overeenkomstige Gregoriaanse kalender jaar.

Return Data Type

DATE

Voorbeeld

Deze geven beide de laatste dag van de maand terug:

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

Dit geeft de laatste dag van het jaar terug:

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

Dit geeft de laatste dag van de week terug voor een week die op een zondag begint:

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

Dit geeft de laatste dag van de week voor een week die op maandag begint:

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

Converteert een tekenreeksweergave van een datetime naar eenDATETIME object.

format_string bevat de opmaakelementen die bepalen hoe datetime_string wordt opgemaakt. Elk element indatetime_string moet een corresponderend element in format_string hebben. De plaats van elk element in format_string moet overeenkomen met de plaats van elk element in datetime_string.

De format string ondersteunt de meeste format elementen volledig, met uitzondering van%Q, %a, %A,%g, %G, %j, %P, %u, %U, %V, %w, en %W.

PARSE_DATETIME parseert string volgens de volgende regels:

  • Ongespecificeerde velden. Elk ongespecificeerd veld wordt geïnitialiseerd vanaf1970-01-01 00:00:00.0. Bijvoorbeeld, als het jaar niet gespecificeerd is, dan wordt het standaard ingesteld op 1970.
  • Hoofdlettergevoelige namen. Namen, zoals Monday en February, zijn hoofdletterongevoelig.
  • Witruimte. Een of meer opeenvolgende witte spaties in de format string komt overeen met nul of meer opeenvolgende witte spaties in deDATETIME string. Voor- en achterlopende spaties in de DATETIME string zijn altijd toegestaan, zelfs als ze niet in de format string staan.
  • Formaat voorrang. Als twee of meer format elementen overlappende informatie hebben, heeft de laatste over het algemeen voorrang op de eerdere, met enkele uitzonderingen. Bijvoorbeeld, zowel %F als %Y hebben invloed op het jaar, dus het eerste element heeft voorrang op het laatste. Zie de beschrijvingen van %s, %C, en %y in Ondersteunde opmaak-elementen voor DATETIME.

Return Data Type

DATETIME

Examples

De volgende voorbeelden parsen een STRING letterlijke als eenDATETIME.

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

Het volgende voorbeeld parseert een STRING letterlijk die een datum bevat in een natuurlijke taalindeling als eenDATETIME.

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

Ondersteunde opmaakelementen voor DATETIME

Niet anders vermeld, DATETIME-functies die opmaakstrings gebruiken, ondersteunen de volgende elementen:

Similar Posts

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.