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
- Constructs a
DATETIMEobject using INT64 valuesrepresenting the year, month, day, hour, minute, and second. - Construeert een
DATETIME-object met behulp van een DATUM-object en een optioneel TIJD-object. - 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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYOFWEEKDAYDAYOFYEAR-
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 vandatetime_expressionin de reeks . Weken beginnen opWEEKDAY.datetimes voorafgaand aan de eersteWEEKDAYvan het jaar zijn in week 0. Geldige waarden voorWEEKDAYzijnSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, enSATURDAY. -
ISOWEEK: Geeft als resultaat het ISO 8601 weeknummer van dedatetime_expression.ISOWEEKs beginnen op maandag. De teruggegeven waarden liggen in het bereik . De eersteISOWEEKvan elk ISO-jaar begint op de maandag vóór de eerste donderdag van het Gregoriaanse kalenderjaar. MONTHQUARTERYEAR-
ISOYEAR: Geeft als resultaat het ISO 8601-weeknummerjaar, dat wil zeggen het Gregoriaanse kalenderjaar dat de donderdag bevat van de week waartoedate_expressionbehoort. DATETIME
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
partDATEis, wordt eenDATEobject teruggezonden. - Indien
partTIMEis, wordt eenTIMEobject 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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Equivalent aan 7DAYs. MONTHQUARTERYEAR
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK. Equivalent aan 7DAYs. MONTHQUARTERYEAR
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_a – datetime_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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAY-
WEEK: Dit datumgedeelte begint op zondag. -
WEEK(<WEEKDAY>): Dit datumgedeelte begint opWEEKDAY. Geldige waarden voorWEEKDAYzijnSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, enSATURDAY. -
ISOWEEK: Gebruikt ISO 8601 weekgrenzen. ISO-weken beginnen op maandag. MONTHQUARTERYEAR-
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:
MICROSECONDMILLISECONDSECONDMINUTEHOURDAYWEEK-
WEEK(<WEEKDAY>): Truncatesdatetime_expressiontot de voorafgaande weekgrens, waarbij de weken beginnen opWEEKDAY. Geldige waarden voorWEEKDAYzijnSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, enSATURDAY. -
ISOWEEK: Truncatesdatetime_expressiontot de voorgaandeISO 8601 weekgrens.ISOWEEKbegint op maandag. De eersteISOWEEKvan elk ISO-jaar bevat de eerste donderdag van het overeenkomstige Gregoriaanse kalenderjaar. Elkedate_expressioneerder dan deze wordt afgekapt op de voorafgaande maandag. MONTHQUARTERYEAR-
ISOYEAR: Afgekaptdatetime_expressionop 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:
YEARQUARTERMONTH-
WEEK. Equivalent aan 7DAYs. -
WEEK(<WEEKDAY>).<WEEKDAY>staat voor de begindag van de week. Geldige waarden zijnSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, enSATURDAY. -
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 vanaf
1970-01-01 00:00:00.0. Bijvoorbeeld, als het jaar niet gespecificeerd is, dan wordt het standaard ingesteld op1970. - Hoofdlettergevoelige namen. Namen, zoals
MondayenFebruary, zijn hoofdletterongevoelig. - Witruimte. Een of meer opeenvolgende witte spaties in de format string komt overeen met nul of meer opeenvolgende witte spaties in de
DATETIMEstring. Voor- en achterlopende spaties in deDATETIMEstring 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
%Fals%Yhebben invloed op het jaar, dus het eerste element heeft voorrang op het laatste. Zie de beschrijvingen van%s,%C, en%yin 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: