Datové funkce ve standardním SQL

author
10 minutes, 28 seconds Read

BigQuery podporuje následující DATETIME funkce.

Všechny výstupy jsou automaticky formátovány podle ISO 8601, datum a čas jsou odděleny znakem aT.

CURRENT_DATETIME

CURRENT_DATETIME()

Popis

Vrací aktuální čas jako objekt DATETIME.

Tato funkce podporuje volitelný parametr timezone.Informace o zadání časového pásma naleznete v části Definice časových pásem.

Vrací datový typ

DATETIME

Příklad

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

DATETIME

Popis

  1. Konstruuje objekt DATETIME pomocí hodnot INT64reprezentujících rok, měsíc, den, hodinu, minutu a sekundu.
  2. Konstruuje objekt DATETIME pomocí objektu DATE a nepovinného objektu TIME.
  3. Konstruuje objekt DATETIME pomocí objektu TIMESTAMP. Podporuje volitelný parametr pro zadání časového pásma. Pokud není zadána časová zóna, použije se výchozí časová zóna UTC.

Vrátí datový typ

DATETIME

Příklad

EXTRACT

EXTRACT(part FROM datetime_expression)

Popis

Vrátí hodnotu, která odpovídá zadanému part z dodaného datetime_expression.

Povolené hodnoty part jsou:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK: Vrátí číslo týdne data v rozsahu . Týdny začínají nedělí a data před první nedělí v roce jsou v týdnu 0.
  • WEEK(<WEEKDAY>): Vrátí číslo týdne datetime_expression v rozsahu . Týdny začínají WEEKDAY. datetimedata před první WEEKDAY v roce jsou v týdnu 0. Platné hodnoty pro WEEKDAY jsou SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY a SATURDAY.
  • ISOWEEK: Vrátí číslo týdne ISO 8601 pro datetime_expression. ISOWEEK Začíná v pondělí. Vrácené hodnotyjsou v rozsahu . První ISOWEEK každého roku ISO začíná vpondělí před prvním čtvrtkem gregoriánského kalendářního roku.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR:
  • DATE
  • TIME

Vrácené hodnoty zkracují časová období nižšího řádu. Například při extrakci sekund EXTRACT zkrátí hodnoty milisekund a mikrosekund.

Vrací datový typ

INT64, kromě následujících případů:

  • Pokud je part DATE, vrací objekt DATE.
  • Pokud je part TIME, vrací objekt TIME.

Příklady

V následujícím příkladu EXTRACT vrací hodnotu odpovídající části HOURčasu.

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

V následujícím příkladu EXTRACT vrací hodnoty odpovídající různým částem času ze sloupce datumů.

V následujícím příkladu datetime_expression připadá na neděli. EXTRACTvypočítá první sloupec pomocí týdnů, které začínají v neděli, a druhý sloupec vypočítá pomocí týdnů, které začínají v pondělí.

DATETIME_ADD

DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)

Popis

Přidá int64_expression jednotek part k objektu DATETIME.

DATETIME_ADD Podporuje následující hodnoty pro part:

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

Speciální zpracování je nutné pro části MĚSÍC, ČTVRTEK a ROK, pokud je datum v poslední den měsíce (nebo v jeho blízkosti). Pokud má výsledný měsíc méně dní než den původního DATETIME, pak je výsledný den posledním dnem nového měsíce.

Vrátí datový typ

DATETIME

Příklad

DATETIME_SUB

DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)

Popis

Odčítá int64_expression jednotek part od DATETIME.

DATETIME_SUB Podporuje následující hodnoty pro part:

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

Speciální zacházení je nutné pro části MONTH, QUARTER a YEAR, pokud je datum v poslední den měsíce (nebo v jeho blízkosti). Pokud má výsledný měsíc méně dní než původní den DATETIME, pak je výsledný den posledním dnem nového měsíce.

Vrátí datový typ

DATETIME

Příklad

DATETIME_DIFF

DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)

Popis

Vrátí počet celých zadaných part intervalů mezi dvěma objektyDATETIME (datetime_expression_adatetime_expression_b). pokud je první DATETIME dřívější než druhý, je výstup záporný. Vyhodí chybu, pokud výpočet přeteče typ výsledku, například pokud by rozdíl v mikrosekundách mezi dvěma objekty DATETIME přetekl hodnotuINT64.

DATETIME_DIFF Podporuje následující hodnoty pro part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK: Tato část data začíná nedělí.
  • WEEK(<WEEKDAY>): Tato část data začíná WEEKDAY. Platné hodnoty pro WEEKDAY jsou SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY a SATURDAY.
  • ISOWEEK: Používá hranice týdnů podle ISO 8601. Týdny ISO začínají pondělím.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Používá hranici roku pro číslování týdnů podle ISO 8601. Hranice roku ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného gregoriánského kalendářního roku.

Vrátit datový typ

INT64

Příklad

Výše uvedený příklad ukazuje výsledek DATETIME_DIFF pro dvě DATETIME, které jsou od sebe vzdáleny 24 hodin. DATETIME_DIFF s částí WEEK vrátí 1, protožeDATETIME_DIFF počítá počet hranic částí v tomto rozsahuDATETIMEs. Každý WEEK začíná v neděli, takže mezi sobotou 2017-10-14 00:00:00 a nedělí 2017-10-15 00:00:00 je jedna hranice dílů.

Následující příklad ukazuje výsledek DATETIME_DIFF pro dvě data bez rozdílu roku. DATETIME_DIFF s částí data YEAR vrací 3, protože počítá počet hranic gregoriánského kalendářního roku mezi dvěma DATETIME. DATETIME_DIFF s datovou částí ISOYEAR vrátí 2, protože druhý DATETIME patří do ISO roku 2015. První čtvrtek kalendářního roku 2015 byl 2015-01-01, takže ISO rok 2015 začíná v předcházejícípondělí, 2014-12-29.

Následující příklad ukazuje výsledek DATETIME_DIFF pro dva dny bez střídání. První datum připadá na pondělí a druhé datum připadá na neděli. DATETIME_DIFF s datovou částí WEEK vrátí 0, protože tato časová část používá týdny, které začínají nedělí. DATETIME_DIFF s částí dataWEEK(MONDAY) vrací 1. DATETIME_DIFF s datovou částíISOWEEK rovněž vrací 1, protože týdny ISO začínají v pondělí.

DATETIME_TRUNC

DATETIME_TRUNC(datetime_expression, part)

Popis

Zkracuje objekt DATETIME na granularitu part.

DATETIME_TRUNC Podporuje následující hodnoty pro part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): Zkracuje datetime_expression na předcházející hranici týdne, kde týdny začínají WEEKDAY. Platné hodnoty pro WEEKDAY jsouSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY aSATURDAY.
  • ISOWEEK: Zkrátí datetime_expression na předcházející hranici týdneISO 8601. ISOWEEKzačíná v pondělí. První ISOWEEK každého roku ISO obsahuje prvníčtvrtek odpovídajícího gregoriánského kalendářního roku. Jakýkoli date_expressiondříve se zkrátí na předcházející pondělí.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Zkrátí se datetime_expression na předcházející hranici roku číslování týdnů ISO 8601. Hranicí roku ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného roku gregoriánského kalendáře.

Vrátit datový typ

DATETIME

Příklady

V následujícím příkladu připadá původní DATETIME na neděli. Protožepart je WEEK(MONDAY), DATE_TRUNC vrátí DATETIME pro předcházející pondělí.

V následujícím příkladu je původní datetime_expression v gregoriánském kalendářním roce 2015. Avšak DATETIME_TRUNC s datem ISOYEAR zkrátí datetime_expression na začátek roku ISO, nikoliv na rok gregoriánského kalendáře. První čtvrtek kalendářního roku 2015 byl2015-01-01, takže ISO rok 2015 začíná předchozím pondělím, 2014-12-29. Proto hranice ISO roku předcházející datetime_expression2015-06-15 00:00:00 je 2014-12-29.

FORMAT_DATETIME

FORMAT_DATETIME(format_string, datetime_expression)

Popis

Formátuje objekt DATETIME podle zadaného format_string. Seznam formátovacích prvků, které tato funkce podporuje, viz Podporované formátovací prvky pro DATETIME.

Vrací datový typ

STRING

Příklady

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)

Popis

Vrací poslední den z výrazu datetime, který obsahuje datum.Běžně se používá pro vrácení posledního dne v měsíci.

Můžete volitelně zadat část data, pro kterou se vrací poslední den. pokud není tento parametr použit, je výchozí hodnota MONTH.LAST_DAY podporuje následující hodnoty pro date_part:

  • YEAR
  • QUARTER
  • MONTH
  • WEEK. Ekvivalent 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> představuje počáteční den v týdnu. platné hodnoty jsou SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY a SATURDAY.
  • ISOWEEK. Používá hranice týdnů podle ISO 8601. Týdny ISO začínají v pondělí.
  • ISOYEAR. Používá hranici roku pro číslování týdnů podle ISO 8601. Hranicí roku podle ISO je pondělí prvního týdne, jehož čtvrtek patří do příslušného gregoriánského kalendářního roku.

Vrací datový typ

DATE

Příklad

Obojí vrací poslední den měsíce:

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

Vrací poslední den roku:

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

Vrací poslední den týdne pro týden, který začíná nedělí:

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

Vrací poslední den týdne pro týden, který začíná v pondělí:

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)

Popis

Převede řetězcovou reprezentaci data na objektDATETIME.

format_string Obsahuje formátovací prvky, které definují způsob formátování datetime_string. Každý prvek v datetime_string musí mít odpovídající prvek v format_string. Umístění každého prvku v format_string musí odpovídat umístěníkaždého prvku v datetime_string.

Formátovací řetězec plně podporuje většinu formátovacích prvků s výjimkou%Q, %a, %A,%g, %G, %j, %P, %u, %U, %V, %w a %W.

PARSE_DATETIME analyzuje string podle následujících pravidel:

  • Neurčená pole. Jakékoli nespecifikované pole je inicializováno od 1970-01-01 00:00:00.0. Například pokud je rok nespecifikovaný, pak je výchozí hodnota 1970.
  • Názvy nerozlišující velká a malá písmena. U názvů, jako jsou Monday a February,se nerozlišují velká a malá písmena.
  • Bílá místa. Jedna nebo více po sobě jdoucích bílých mezer ve formátovacím řetězci se shoduje s nulou nebo více po sobě jdoucími bílými mezerami v řetězciDATETIME. Přední a koncové bílé mezery v řetězci DATETIME jsou vždy povoleny, i když nejsou ve formátovacím řetězci.
  • Přednost formátu. Pokud mají dva nebo více formátovacích prvků překrývající seinformace, poslední z nich má obecně přednost před všemi dřívějšími, s některýmivýjimkami. Například %F i %Y ovlivňují rok, takže dřívější prvek má přednost před pozdějším. Viz popis %s, %C a %y v částiPodporované formátovací prvky pro DATETIME.

Vrátit datový typ

DATETIME

Příklady

Následující příklady analyzují literál STRING jakoDATETIME.

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

Následující příklad analyzuje STRING literálobsahující datum ve formátu přirozeného jazyka jakoDATETIME.

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

Podporované formátovací prvky pro DATETIME

Není-li uvedeno jinak, funkce DATETIME, které používají formátovací řetězce, podporují následující prvky:

.

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.