Funções de carimbo de data/hora

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O BigQuery é compatível com várias funções TIMESTAMP.

IMPORTANTE: antes de trabalhar com essas funções, você precisa entender a diferença entre os formatos em que os carimbos de data/hora são armazenados e exibidos e como os fusos horários são usados para a conversão entre esses formatos. Para saber mais, consulte Como os fusos horários funcionam com funções de carimbo de data/hora.

OBSERVAÇÃO: essas funções retornam um erro de tempo execução, se ocorrer um estouro. Os valores dos resultados são limitados até os valores mínimo e máximo da data e do carimbo de data/hora definidos.

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP()

Descrição

CURRENT_TIMESTAMP() produz um valor TIMESTAMP que é contínuo, não ambíguo, tem exatamente 60 segundos por minuto e não repete valores durante o segundo. O uso de parênteses é opcional.

Essa função trata os segundos bissextos distribuindo-os em um intervalo de 20 horas em torno do ajuste inserido.

Tipos de entradas compatíveis

Não aplicável

Tipo de dados de resultado

TIMESTAMP

Exemplos

SELECT CURRENT_TIMESTAMP() AS now;

+--------------------------------+
| now                            |
+--------------------------------+
| 2020-06-02 23:57:12.120174 UTC |
+--------------------------------+

Quando uma coluna chamada current_timestamp está presente, o nome da coluna e a chamada de função sem parênteses são ambíguos. Para garantir a chamada da função, adicione parênteses. Para garantir o nome da coluna, qualifique-o com a variável de intervalo dele. Por exemplo, a consulta a seguir selecionará a função na coluna now e a coluna da tabela na coluna current_timestamp.

WITH t AS (SELECT 'column value' AS `current_timestamp`)
SELECT current_timestamp() AS now, t.current_timestamp FROM t;

+--------------------------------+-------------------+
| now                            | current_timestamp |
+--------------------------------+-------------------+
| 2020-06-02 23:57:12.120174 UTC | column value      |
+--------------------------------+-------------------+

EXTRACT

EXTRACT(part FROM timestamp_expression [AT TIME ZONE time_zone])

Descrição

Retorna um valor que corresponde ao part especificado de um timestamp_expression fornecido. Essa função aceita um parâmetro time_zone opcional. Para informações sobre como especificar um fuso horário, consulte Definições de fuso horário.

Os valores part permitidos são:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK: retorna valores no intervalo [1,7] com domingo como primeiro dia da semana.
  • DAY
  • DAYOFYEAR
  • WEEK: retorna o número da semana da data no intervalo [0, 53]. As semanas começam no domingo. Os dias anteriores ao primeiro domingo do ano estão na semana 0.
  • WEEK(<WEEKDAY>): retorna o número da semana de timestamp_expression no intervalo [0, 53]. As semanas começam em WEEKDAY. datetimes antes da primeira WEEKDAY do ano são na semana zero. Os valores válidos para WEEKDAY são SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY e SATURDAY.
  • ISOWEEK: retorna o número da semana ISO 8601 de datetime_expression. As ISOWEEKs começam na segunda-feira. Os valores de retorno estão no intervalo [1, 53]. O primeiro ISOWEEK de cada ano ISO começa na segunda-feira anterior à primeira quinta-feira do ano do calendário gregoriano.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: retorna o ano da numeração da semana ISO 8601, que é o ano do calendário gregoriano que contém a quinta-feira da semana à qual date_expression pertence.
  • DATE
  • DATETIME
  • TIME

Os valores retornados truncam períodos menores de tempo. Por exemplo, ao extrair segundos, EXTRACT trunca os valores de milissegundos e microssegundos.

Tipo de dados retornados

INT64, exceto quando:

  • part é DATE, retorna um DATEobjeto.
  • part é DATETIME, retorna um DATETIMEobjeto.
  • part é TIME, retorna um TIMEobjeto.

Exemplos

No exemplo a seguir, EXTRACT retorna um valor correspondente à parte de hora de DAY.

WITH Input AS (SELECT TIMESTAMP("2008-12-25 05:30:00+00") AS timestamp_value)
SELECT
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "UTC") AS the_day_utc,
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "America/Los_Angeles") AS the_day_california
FROM Input

+-------------+--------------------+
| the_day_utc | the_day_california |
+-------------+--------------------+
| 25          | 24                 |
+-------------+--------------------+

No exemplo a seguir, EXTRACT retorna valores correspondentes a diferentes partes da hora de uma coluna de carimbos de data/hora.

WITH Timestamps AS (
  SELECT TIMESTAMP("2005-01-03 12:34:56+00") AS timestamp_value UNION ALL
  SELECT TIMESTAMP("2007-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-01-01 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-01-02 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-05-26 12:00:00+00")
)
SELECT
  timestamp_value,
  EXTRACT(ISOYEAR FROM timestamp_value) AS isoyear,
  EXTRACT(ISOWEEK FROM timestamp_value) AS isoweek,
  EXTRACT(YEAR FROM timestamp_value) AS year,
  EXTRACT(WEEK FROM timestamp_value) AS week
FROM Timestamps
ORDER BY timestamp_value;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+---------+---------+------+------+
| timestamp_value         | isoyear | isoweek | year | week |
+-------------------------+---------+---------+------+------+
| 2005-01-03 12:34:56 UTC | 2005    | 1       | 2005 | 1    |
| 2007-12-31 12:00:00 UTC | 2008    | 1       | 2007 | 52   |
| 2009-01-01 12:00:00 UTC | 2009    | 1       | 2009 | 0    |
| 2009-12-31 12:00:00 UTC | 2009    | 53      | 2009 | 52   |
| 2017-01-02 12:00:00 UTC | 2017    | 1       | 2017 | 1    |
| 2017-05-26 12:00:00 UTC | 2017    | 21      | 2017 | 21   |
+-------------------------+---------+---------+------+------+

No exemplo a seguir, timestamp_expression cai em uma segunda-feira. EXTRACT calcula a primeira coluna usando semanas que começam no domingo e calcula a segunda coluna usando semanas que começam na segunda-feira.

WITH table AS (SELECT TIMESTAMP("2017-11-05 00:00:00+00") AS timestamp_value)
SELECT
  timestamp_value,
  EXTRACT(WEEK(SUNDAY) FROM timestamp_value) AS week_sunday,
  EXTRACT(WEEK(MONDAY) FROM timestamp_value) AS week_monday
FROM table;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------+---------------+
| timestamp_value         | week_sunday | week_monday   |
+-------------------------+-------------+---------------+
| 2017-11-05 00:00:00 UTC | 45          | 44            |
+-------------------------+-------------+---------------+

STRING

STRING(timestamp_expression[, time_zone])

Descrição

Converte um timestamp_expression em um tipo de dados STRING. Aceita um parâmetro opcional para especificar um fuso horário. Para informações sobre como especificar um fuso horário, consulte Definições de fuso horário.

Tipo de dados retornados

STRING

Exemplo

SELECT STRING(TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS string;

+-------------------------------+
| string                        |
+-------------------------------+
| 2008-12-25 15:30:00+00        |
+-------------------------------+

TIMESTAMP

TIMESTAMP(string_expression[, time_zone])
TIMESTAMP(date_expression[, time_zone])
TIMESTAMP(datetime_expression[, time_zone])

Descrição

  • string_expression[, time_zone]: converte uma expressão STRING em um tipo de dados TIMESTAMP. string_expression precisa incluir um literal de carimbo de data e hora. Se string_expression incluir um fuso horário no literal de carimbo data/hora, não inclua um argumento time_zone explícito.
  • date_expression[, time_zone]: converte um objeto DATE em um tipo de dados TIMESTAMP.
  • datetime_expression[, time_zone]: converte um objeto DATETIME para um tipo de dados TIMESTAMP.

Esta função é compatível com um parâmetro opcional para especificar um fuso horário. Se nenhum fuso horário for especificado, será usado o padrão UTC.

Tipo de dados retornados

TIMESTAMP

Exemplos

SELECT TIMESTAMP("2008-12-25 15:30:00+00") AS timestamp_str;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP("2008-12-25 15:30:00", "America/Los_Angeles") AS timestamp_str;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 23:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP("2008-12-25 15:30:00 UTC") AS timestamp_str;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP(DATETIME "2008-12-25 15:30:00") AS timestamp_datetime;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_datetime      |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP(DATE "2008-12-25") AS timestamp_date;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_date          |
+-------------------------+
| 2008-12-25 00:00:00 UTC |
+-------------------------+

TIMESTAMP_ADD

TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part)

Descrição

Adiciona unidades int64_expression de date_part ao carimbo de data/hora, independentemente de qualquer fuso horário.

TIMESTAMP_ADD aceita os seguintes valores para date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR: equivalente a 60 MINUTEs
  • DAY. Equivalente a 24 HOURs.

Tipos de dados retornados

TIMESTAMP

Exemplo

SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_ADD(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS later;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | later                   |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:40:00 UTC |
+-------------------------+-------------------------+

TIMESTAMP_SUB

TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part)

Descrição

Subtrai unidades int64_expression de date_part do carimbo de data/hora, independentemente de qualquer fuso horário.

TIMESTAMP_SUB aceita os seguintes valores para date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR: equivalente a 60 MINUTEs
  • DAY. Equivalente a 24 HOURs.

Tipo de dados retornados

TIMESTAMP

Exemplo

SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_SUB(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS earlier;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | earlier                 |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:20:00 UTC |
+-------------------------+-------------------------+

TIMESTAMP_DIFF

TIMESTAMP_DIFF(timestamp_expression_a, timestamp_expression_b, date_part)

Descrição

Retorna o número de intervalos date_part inteiros especificados entre dois objetos TIMESTAMP (timestamp_expression_a - timestamp_expression_b). Se o primeiro TIMESTAMP for anterior ao segundo, a saída será negativa. Lança um erro se o cálculo estoura o tipo de resultado, como se a diferença em microssegundos entre os dois objetos TIMESTAMP estourasse um valor INT64.

TIMESTAMP_DIFF aceita os seguintes valores para date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR: equivalente a 60 MINUTEs
  • DAY. Equivalente a 24 HOURs.

Tipo de dados retornados

INT64

Exemplo

SELECT
  TIMESTAMP("2010-07-07 10:20:00+00") AS later_timestamp,
  TIMESTAMP("2008-12-25 15:30:00+00") AS earlier_timestamp,
  TIMESTAMP_DIFF(TIMESTAMP "2010-07-07 10:20:00+00", TIMESTAMP "2008-12-25 15:30:00+00", HOUR) AS hours;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------+
| later_timestamp         | earlier_timestamp       | hours |
+-------------------------+-------------------------+-------+
| 2010-07-07 10:20:00 UTC | 2008-12-25 15:30:00 UTC | 13410 |
+-------------------------+-------------------------+-------+

No exemplo a seguir, o primeiro carimbo de data/hora ocorre antes do segundo, resultando em uma saída negativa.

SELECT TIMESTAMP_DIFF(TIMESTAMP "2018-08-14", TIMESTAMP "2018-10-14", DAY);

+---------------+
| negative_diff |
+---------------+
| -61           |
+---------------+

Neste exemplo, o resultado é 0 porque somente o número de intervalos HOUR especificados inteiros é incluído.

SELECT TIMESTAMP_DIFF("2001-02-01 01:00:00", "2001-02-01 00:00:01", HOUR)

+---------------+
| negative_diff |
+---------------+
| 0             |
+---------------+

TIMESTAMP_TRUNC

TIMESTAMP_TRUNC(timestamp_expression, date_time_part[, time_zone])

Descrição

Trunca um valor TIMESTAMP para a granularidade de date_time_part. O valor TIMESTAMP é sempre arredondado para o início de date_time_part, que pode ser um dos seguintes:

  • MICROSECOND: se usado, nada é truncado no valor.
  • MILLISECOND: o menor valor de milissegundos ou igual.
  • SECOND: o menor valor ou igual de segundos.
  • MINUTE: o minuto menor ou igual mais próximo.
  • HOUR: o horário menor ou igual mais próximo.
  • DAY: o dia no ano do calendário gregoriano que contém o valor TIMESTAMP.
  • WEEK: o primeiro dia da semana que contém o valor TIMESTAMP. As semanas começam aos domingos. WEEK é equivalente a WEEK(SUNDAY).
  • WEEK(WEEKDAY): o primeiro dia da semana que contém o valor TIMESTAMP. As semanas começam em WEEKDAY. WEEKDAY precisa ser um dos seguintes: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY ou SATURDAY.
  • ISOWEEK: o primeiro dia da semana ISO 8601 na semana ISO que contém o valor TIMESTAMP. A semana ISO começa na segunda-feira. A primeira semana ISO de cada ano ISO contém a primeira quinta-feira do ano do calendário gregoriano correspondente.
  • MONTH: o primeiro dia do mês que contém o valor de TIMESTAMP.
  • QUARTER: o primeiro dia do trimestre no trimestre que contém o valor TIMESTAMP.
  • YEAR: o primeiro dia do ano que contém o valor TIMESTAMP.
  • ISOYEAR: o primeiro dia do ano de numeração da semana ISO 8601 no ano ISO que contém o valor TIMESTAMP. O ano ISO é a segunda-feira da primeira semana que contém a quinta-feira pertencente ao ano do calendário gregoriano correspondente.

A função TIMESTAMP_TRUNC é compatível com um parâmetro time_zone opcional. Esse parâmetro se aplica aos seguintes date_time_part:

  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>)
  • ISOWEEK
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR

Use esse parâmetro para um fuso horário diferente do UTC padrão, como parte da operação de truncamento.

Ao truncar um TIMESTAMP para MINUTE ou HOUR, TIMESTAMP_TRUNC determina o tempo civil do TIMESTAMP no fuso horário especificado (ou padrão) e subtrai os minutos e segundos (ao truncar para HOUR) ou os segundos (ao truncar para MINUTE) a partir desse TIMESTAMP. Na maioria dos casos, esse procedimento fornece resultados intuitivos, exceto próximo a transições de horário de verão que não são alinhadas por hora.

Tipo de dados retornados

TIMESTAMP

Exemplos

SELECT
  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", DAY, "UTC") AS utc,
  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", DAY, "America/Los_Angeles") AS la;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-----------------=-------+
| utc                     | la                      |
+-------------------------+-------------------------+
| 2008-12-25 00:00:00 UTC | 2008-12-25 08:00:00 UTC |
+-------------------------+-------------------------+

No exemplo a seguir, timestamp_expression tem um deslocamento de fuso horário de +12. A primeira coluna mostra timestamp_expression na hora UTC. A segunda coluna mostra a saída de TIMESTAMP_TRUNC usando semanas que começam na segunda-feira. Porque o timestamp_expression cai em um domingo em UTC, TIMESTAMP_TRUNC trunca a segunda-feira anterior. A terceira coluna mostra a mesma função com o argumento de Definição de fuso horário opcional "Pacific/Auckland". Aqui, a função trunca o timestamp_expression usando o horário de verão neozelandês, em que ele cai na segunda-feira.

SELECT
  timestamp_value AS timestamp_value,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "UTC") AS utc_truncated,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "Pacific/Auckland") AS nzdt_truncated
FROM (SELECT TIMESTAMP("2017-11-06 00:00:00+12") AS timestamp_value);

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------------------------+
| timestamp_value         | utc_truncated           | nzdt_truncated          |
+-------------------------+-------------------------+-------------------------+
| 2017-11-05 12:00:00 UTC | 2017-10-30 00:00:00 UTC | 2017-11-05 11:00:00 UTC |
+-------------------------+-------------------------+-------------------------+

No exemplo a seguir, o timestamp_expression original está no ano letivo gregoriano de 2015. No entanto, TIMESTAMP_TRUNC com a parte da data ISOYEAR trunca o timestamp_expression para o início do ano ISO, não o ano calendário gregoriano. A primeira quinta-feira do ano-calendário de 2015 foi 2015-01-01, então o ano ISO 2015 começa na segunda-feira anterior, 2014-12-29. Portanto, o limite do ano ISO anterior a timestamp_expression 2015-06-15 00:00:00 + 00 é 2014-12-29.

SELECT
  TIMESTAMP_TRUNC("2015-06-15 00:00:00+00", ISOYEAR) AS isoyear_boundary,
  EXTRACT(ISOYEAR FROM TIMESTAMP "2015-06-15 00:00:00+00") AS isoyear_number;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+----------------+
| isoyear_boundary        | isoyear_number |
+-------------------------+----------------+
| 2014-12-29 00:00:00 UTC | 2015           |
+-------------------------+----------------+

FORMAT_TIMESTAMP

FORMAT_TIMESTAMP(format_string, timestamp[, time_zone])

Descrição

Formata um carimbo de data e hora de acordo com o format_string especificado.

Consulte Elementos de formatos compatíveis de TIMESTAMP para ver uma lista de elementos de formato aceitos por essa função.

Tipo de dados retornados

STRING

Exemplo

SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS formatted;

+--------------------------+
| formatted                |
+--------------------------+
| Thu Dec 25 15:30:00 2008 |
+--------------------------+
SELECT FORMAT_TIMESTAMP("%b-%d-%Y", TIMESTAMP "2008-12-25 15:30:00+00") AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec-25-2008 |
+-------------+
SELECT FORMAT_TIMESTAMP("%b %Y", TIMESTAMP "2008-12-25 15:30:00+00")
  AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec 2008    |
+-------------+

PARSE_TIMESTAMP

PARSE_TIMESTAMP(format_string, timestamp_string[, time_zone])

Descrição

Converte uma representação de string de um carimbo de data/hora em um objeto TIMESTAMP.

format_string contém os elementos de formato que definem como timestamp_string é formatado. Cada elemento em timestamp_string precisa ter um elemento correspondente em format_string. O local de cada elemento em format_string precisa corresponder à localização de cada elemento em timestamp_string.

-- This works because elements on both sides match.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S %Y", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because the year element is in different locations.
SELECT PARSE_TIMESTAMP("%a %b %e %Y %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because one of the year elements is missing.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This works because %c can find all matching elements in timestamp_string.
SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008")

A string de formato é totalmente compatível com a maioria dos elementos de formato, exceto %P.

Ao usar PARSE_TIMESTAMP, tenha em mente os seguintes itens:

  • Campos não especificados. Qualquer campo não especificado é inicializado em 1970-01-01 00:00:00.0. Esse valor de inicialização usa o fuso horário especificado pelo argumento de fuso horário da função, se houver. Caso contrário, o valor de inicialização usa o fuso horário UTC padrão. Por exemplo, se o ano não for especificado, o padrão será 1970 e assim por diante.
  • Não diferencia maiúsculas de minúsculas. Nomes, como Monday, February e outros, não diferenciam maiúsculas de minúsculas.
  • Espaço em branco. Um ou mais espaços em branco consecutivos na string de formato correspondem a zero ou mais espaços em branco consecutivos na string de carimbo de data/hora. Além disso, espaços em branco à esquerda e à direita na string de carimbo de data/hora sempre são permitidos, mesmo que não estejam na string de formato.
  • Precedência de formato. Quando dois (ou mais) elementos de formato têm informações sobrepostas (por exemplo, %F e %Y afetam o ano), a última geralmente modifica as anteriores, com algumas exceções (consulte as descrições de %s, %C e %y).
  • Divergência de formato. %p pode ser usado com am, AM, pm e PM.

Tipo de dados retornados

TIMESTAMP

Exemplo

SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008") AS parsed;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| parsed                  |
+-------------------------+
| 2008-12-25 07:30:00 UTC |
+-------------------------+

TIMESTAMP_SECONDS

TIMESTAMP_SECONDS(int64_expression)

Descrição

Interpreta int64_expression como o número de segundos desde 01/01/1970 00:00:00 UTC e retorna um carimbo de data/hora.

Tipo de dados retornados

TIMESTAMP

Exemplo

SELECT TIMESTAMP_SECONDS(1230219000) AS timestamp_value;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

TIMESTAMP_MILLIS

TIMESTAMP_MILLIS(int64_expression)

Descrição

Interpreta int64_expression como o número de milissegundos desde 01/01/1970 00:00:00 UTC e retorna um carimbo de data/hora.

Tipo de dados retornados

TIMESTAMP

Exemplo

SELECT TIMESTAMP_MILLIS(1230219000000) AS timestamp_value;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

TIMESTAMP_MICROS

TIMESTAMP_MICROS(int64_expression)

Descrição

Interpreta int64_expression como o número de microssegundos desde 01/01/1970 00:00:00 UTC e retorna um carimbo de data/hora.

Tipo de dados retornados

TIMESTAMP

Exemplo

SELECT TIMESTAMP_MICROS(1230219000000000) AS timestamp_value;

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

UNIX_SECONDS

UNIX_SECONDS(timestamp_expression)

Descrição

Retorna o número de segundos desde 01/01/1970 00:00:00 UTC. Trunca níveis mais elevados de precisão.

Tipo de dados retornados

INT64

Exemplo

SELECT UNIX_SECONDS(TIMESTAMP "2008-12-25 15:30:00+00") AS seconds;

+------------+
| seconds    |
+------------+
| 1230219000 |
+------------+

UNIX_MILLIS

UNIX_MILLIS(timestamp_expression)

Descrição

Retorna o número de milissegundos desde 1970-01-01 00:00:00 UTC. Trunca níveis maiores de precisão.

Tipo de dados retornados

INT64

Exemplo

SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00+00") AS millis;

+---------------+
| millis        |
+---------------+
| 1230219000000 |
+---------------+

UNIX_MICROS

UNIX_MICROS(timestamp_expression)

Descrição

Retorna o número de milissegundos desde 1970-01-01 00:00:00 UTC. Trunca níveis maiores de precisão.

Tipo de dados retornados

INT64

Exemplo

SELECT UNIX_MICROS(TIMESTAMP "2008-12-25 15:30:00+00") AS micros;

+------------------+
| micros           |
+------------------+
| 1230219000000000 |
+------------------+

Como fusos horários funcionam com funções de carimbo de data/hora

Um carimbo de data/hora representa um ponto absoluto no tempo, independentemente de qualquer fuso horário. No entanto, quando um valor de carimbo de data/hora é exibido, ele geralmente é convertido em um formato legível que consiste em data e hora civil (AAAA-MM-DD HH:MM:SS) e um fuso horário. Observe que esta não é a representação interna do carimbo de data/hora. é apenas uma maneira compreensível de descrever o momento que o carimbo de data/hora representa.

Algumas funções de carimbo de data/hora têm um argumento de fuso horário. É necessário um fuso horário para converter entre o horário civil (AAAA-MM-DD HH:MM:SS) e o horário absoluto (carimbos de data/hora). Uma função como PARSE_TIMESTAMP usa uma string de entrada que representa um horário civil e retorna um carimbo de data/hora que representa um horário absoluto. É necessário um fuso horário para esta conversão. Uma função como EXTRACT usa um carimbo de data/hora de entrada (tempo absoluto) e o converte em hora civil para extrair uma parte desse tempo civil. Essa conversão requer um fuso horário. Se nenhum fuso horário for especificado, será usado o padrão UTC.

Determinadas funções de data e carimbo de data/hora permitem substituir o fuso horário padrão e especificar um diferente. É possível especificar um fuso horário por meio do nome do fuso horário (por exemplo, America/Los_Angeles) ou pelo deslocamento de fuso horário de UTC (por exemplo, -08).

Para saber mais sobre como os fusos horários funcionam com carimbos de data/hora, consulte Fusos horários.