Funções de data e hora em SQL Standard

author
10 minutes, 1 second Read

BigQuery suporta o seguinte DATETIME funções.

Todas as saídas são automaticamente formatadas de acordo com a ISO 8601, separando data e hora com umT.

CURRENT_DATETIME

CURRENT_DATETIME()

Descrição

Retorna a hora actual como um DATETIME objecto.

Esta função suporta um parâmetro opcional timezone.Veja definições de fuso horário para informações sobre como especificar um fuso horário.

Retornar Tipo de Dados

DATETIME

Exemplo

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

DATETIME

Descrição

  1. Constrói um objeto DATETIME usando valores INT64 representando o ano, mês, dia, hora, minuto e segundo.
  2. Constrói um objeto DATETIME usando um objeto DATE e um objeto TIME opcional.
  3. Constrói um objeto DATETIME usando um objeto TIMESTAMP. Suporta um parâmetro anopcional para especificar um fuso horário. Se nenhum fuso horário for especificado, o fuso horário padrão, UTC, é usado.

Return Data Type

DATETIME

Exemplo

EXTRATO

EXTRACT(part FROM datetime_expression)

Descrição

Retorna um valor que corresponde ao especificado part a partir de um valor fornecido datetime_expression.

Dispostos part valores são:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK: Retorna o número da semana da data no intervalo . Semanas começam com domingo, e as datas anteriores ao primeiro domingo do ano estão na semana 0.
  • WEEK(<WEEKDAY>): Devolve o número da semana de datetime_expression no intervalo . As semanas começam em WEEKDAY.datetimes antes do primeiro WEEKDAY do ano estão na semana 0. Os valores válidos para WEEKDAY são SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, e SATURDAY.
  • ISOWEEK: Devolve o número de semana ISO 8601 do datetime_expression. ISOWEEK: Começa na segunda-feira. Os valores de retorno estão no intervalo . O primeiro ISOWEEK de cada ano ISO começa noMonday antes da primeira quinta-feira do ano calendário gregoriano.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Retorna o ano de numeração ISO 8601, que é o ano civil Gregoriano contendo aQuinta-Feira da semana à qual date_expression pertence.
  • DATE
  • TIME

Valores retornados truncam períodos de tempo de ordem inferior. Por exemplo, quando extrair segundos, EXTRACT truncata os valores de milissegundos e microssegundos.

Retornar tipo de dados

INT64, excepto nos seguintes casos:

  • Se part for DATE, retorna um objecto.
  • Se part for TIME, retorna um objecto TIME.

Exemplos

No exemplo seguinte, EXTRACT retorna um valor correspondente a HOURtime part.

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

No exemplo seguinte, EXTRACT retorna valores correspondentes a diferentes times parts de uma coluna de datetimes.

No exemplo seguinte, datetime_expression cai em um domingo. EXTRACTcalula a primeira coluna usando semanas que começam no domingo, e calcula a segunda coluna usando semanas que começam na segunda-feira.

DATETIME_ADD

DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)

Descrição

Adiciona int64_expression unidades de part ao objeto DATETIME.

DATETIME_ADD suporta os seguintes valores para part:

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

Peças de MÊS, QUARTO, e ANO quando a data está no (ou próximo do) último dia do mês. Se o mês resultante tiver poucos dias do que o dia do DATETIME original, então o dia do resultado é o último dia do novo mês.

Tipo de Dados de Retorno

DATETIME

Exemplo

DATETIME_SUB

DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)

Descrição

Subtractos int64_expression unidades de part do DATETIME.

DATETIME_SUB suporta os seguintes valores para part:

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

Requere-se um manuseamento especial para MONTH, QUARTER, e YEAR partes quando a data está no (ou próximo do) último dia do mês. Se o mês resultante tiver poucos dias pastorais do que o dia original DATETIME, então o dia do resultado é o último dia do novo mês.

Return Data Type

DATETIME

Exemplo

DATETIME_DIFF

DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)

Descrição

Retorna o número de inteiro especificado part intervalos entre doisDATETIME objectos (datetime_expression_adatetime_expression_b). Se o primeiro DATETIME for anterior ao segundo, o resultado é negativo. Lança um erro se o cálculo ultrapassar o tipo de resultado, como se a diferença de inmicrossegundos entre os dois DATETIME objetos transbordasse um valor deINT64.

DATETIME_DIFF suporta os seguintes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK: Esta parte da data começa no domingo.
  • WEEK(<WEEKDAY>): Esta parte da data começa em WEEKDAY. Valores válidos para WEEKDAY são SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, e SATURDAY.
  • ISOWEEK: Utiliza os limites semanais ISO 8601. As semanas ISO começam na segunda-feira.
  • MONTH>
  • QUARTER>
  • YEAR
  • >ISOYEAR: Utiliza o limite do ano de numeração ISO 8601. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano calendário gregoriano correspondente.

Tipo de dados de retorno

INT64

Exemplo

>O exemplo acima mostra o resultado de DATETIME_DIFF para dois DATETIMEs que estão separados por 24 horas. DATETIME_DIFF com a peça WEEK retorna 1 porqueDATETIME_DIFF conta o número de limites da peça neste intervalo deDATETIMEs. Cada WEEK começa no domingo, portanto há um limite de peça entre Sábado, 2017-10-14 00:00:00 e Domingo, 2017-10-15 00:00:00.

O exemplo seguinte mostra o resultado de DATETIME_DIFF para duas datas indiferentes anos. DATETIME_DIFF com a parte da data YEAR retorna 3 porque contabiliza o número de limites do ano civil gregoriano entre os doisDATETIMEs. DATETIME_DIFF com a parte da data ISOYEAR retorna 2 porque o segundo DATETIME pertence ao ano ISO 2015. A primeira quinta-feira do ano civil 2015 foi 2015-01-01, portanto o ano ISO 2015 começa no mês de Maio anterior, 2014-12-29.

O exemplo seguinte mostra o resultado de DATETIME_DIFF para dois dias de insucessão. A primeira data cai numa segunda-feira e a segunda data cai numDomingo. DATETIME_DIFF com a parte da data WEEK retorna 0 porque esta parte de tempo usa semanas que começam no domingo. DATETIME_DIFF com a parte da data WEEK(MONDAY) retorna 1. DATETIME_DIFF com a parte da dataISOWEEK também retorna 1 porque as semanas ISO começam na segunda-feira.

DATETIME_TRUNC

DATETIME_TRUNC(datetime_expression, part)

Descrição

Truncates a DATETIME objeto à granularidade de part.

DATETIME_TRUNC suporta os seguintes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): Truncatas datetime_expression ao limite da semana anterior, onde as semanas começam em WEEKDAY. Valores válidos para WEEKDAY sãoSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, eSATURDAY.
  • ISOWEEK: Truncatas datetime_expression até ao limite da semana precedenteISO 8601. ISOWEEKsbegin na segunda-feira. O primeiro ISOWEEK de cada ano ISO contém a primeiraQuinta-feira do ano civil gregoriano correspondente. Qualquer date_expression mais cedo que isso truncará para a segunda-feira anterior.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Truncatas datetime_expression para o limite do ano anterior ISO 8601-semana. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano calendário gregoriano correspondente.

Tipo de dados de retorno

DATETIME>

Exemplos

No exemplo seguinte, o original DATETIME cai num domingo. Porque opart é WEEK(MONDAY), DATE_TRUNC devolve o DATETIME para a segunda-feira anterior.

No exemplo seguinte, o original datetime_expression está no ano civil gregoriano de 2015. No entanto, DATETIME_TRUNC com a data ISOYEARtruncata a parte datetime_expression para o início do ano ISO, e não para o ano civil Gregoriano. A primeira quinta-feira do ano civil 2015 foi 2015-01-01, portanto o ano ISO 2015 começa na segunda-feira anterior, 2014-12-29. Portanto o limite do ano ISO anterior ao datetime_expression2015-06-15 00:00:00 é 2014-12-29.

FORMAT_DATETIME

FORMAT_DATETIME(format_string, datetime_expression)

Descrição

Formatos a DATETIMEobjecto de acordo com o especificado format_string. VejaSupported Format Elements For DATETIME para uma lista de elementos de formato que esta função suporta.

Return Data Type

STRING

Exemplos

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)

Descrição

Retorna o último dia de uma expressão de data/hora que contém a data.Se este parâmetro não for usado, o valor padrão é MONTH.LAST_DAY suporta os seguintes valores para date_part:

  • YEAR
  • QUARTER
  • MONTH
  • WEEK. Equivalente a 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> representa o dia de início da semana. Os valores válidos são SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, e SATURDAY.
  • ISOWEEK. Utiliza os limites da semana ISO 8601. As semanas ISO começam na segunda-feira.
  • ISOYEAR. Utiliza o limite do ano de numeração semanal ISO 8601. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano civil gregoriano correspondente.

Tipo de dados de retorno

DATE

Exemplo

Estes dois retornam o último dia do mês:

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

Este retorna o último dia do ano:

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

Este retorna o último dia da semana para uma semana que começa em um domingo:

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

Este retorna o último dia da semana para uma semana que começa numa segunda-feira:

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)

Descrição

Converte uma representação em cadeia de uma data/hora para um objectoDATETIME.

format_string contém os elementos de formatação que definem como datetime_string é formatado. Cada elemento emdatetime_string deve ter um elemento correspondente em format_string. A localização de cada elemento em format_string deve corresponder à localização de cada elemento em datetime_string.

A cadeia de formatação suporta totalmente a maioria dos elementos de formatação, excepto para%Q, %a, %A,%g, %G, %j, %P, %u, %U, %V, %w, e %W.

>PARSE_DATETIME parses string de acordo com as seguintes regras:

  • Campos não especificados. Qualquer campo não especificado é inicializado a partir de1970-01-01 00:00:00.0. Por exemplo, se o ano não é especificado, então o padrão é 1970.
  • Nomes insensíveis a maiúsculas e minúsculas. Nomes, tais como Monday e February, são insensíveis a maiúsculas/minúsculas.
  • Espaço em branco. Um ou mais espaços brancos consecutivos no formato stringmatches zero ou mais espaços brancos consecutivos no formato stringmatchesDATETIME. Espaços brancos à frente e atrás na string DATETIME são sempre permitidos, mesmo que não estejam na string de formato.
  • Prioridade de formato. Quando dois ou mais elementos de formato têm informação sobreposta, o último geralmente sobrepõe-se a qualquer um dos anteriores, com algumas excepções. Por exemplo, ambos %F e %Y afetam o ano, então o auricular sobrepõe o mais recente. Veja a descrição de %s, %C, e %y emSupported Format Elements For DATETIME.

Return Data Type

DATETIME

Exemplos

Os exemplos seguintes analisam a STRING literal como aDATETIME.

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

Os seguintes exemplos analisam a STRING literalmente contendo uma data em formato de linguagem natural como aDATETIME.

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

Elementos de formato suportados para DATETIME

Sem notar o contrário, DATETIME funções que usam cordas de formato suportam os seguintes elementos:

Similar Posts

Deixe uma resposta

O seu endereço de email não será publicado.