Categorias:

Funções de conversão , Funções de data e hora

TO_DATE , DATE

Converte uma expressão de entrada em uma data:

  • Para uma expressão VARCHAR, o resultado da conversão da cadeia de caracteres em uma data.

  • Para uma expressão TIMESTAMP, a data do carimbo de data/hora.

  • Para uma expressão VARIANT:

    • Se VARIANT contiver uma cadeia de caracteres, é realizada uma conversão da cadeia de caracteres.

    • Se VARIANT contiver uma data, o valor da data é preservado como está.

    • Se VARIANT contiver um valor nulo JSON, a saída será NULL.

  • Para a entrada NULL, a saída será NULL.

Para todos os outros valores, é gerado um erro de conversão.

Consulte também:

TRY_TO_DATE

Sintaxe

TO_DATE( <string_expr> [, <format> ] )
TO_DATE( <timestamp_expr> )
TO_DATE( '<integer>' )
TO_DATE( <variant_expr> )

DATE( <string_expr> [, <format> ] )
DATE( <timestamp_expr> )
DATE( '<integer>' )
DATE( <variant_expr> )
Copy

Argumentos

Obrigatório:

Uma das opções:

string_expr

Cadeia de caracteres da qual se pode extrair uma data. Por exemplo: '2024-01-31'.

timestamp_expr

Uma expressão TIMESTAMP. A parte de DATE do valor TIMESTAMP é extraída.

'integer'

Uma expressão que avalia como uma cadeia de caracteres contendo um número inteiro. Por exemplo: '15000000'. Dependendo da magnitude da cadeia de caracteres, ela pode ser interpretada como segundos, milissegundos, microssegundos ou nanossegundos. Para obter mais detalhes, consulte as notas de uso desta função.

variant_expr

Uma expressão do tipo VARIANT.

O VARIANT deve conter um dos seguintes:

  • Uma cadeia de caracteres da qual se pode extrair uma data.

  • Uma data.

  • Uma cadeia de caracteres contendo um número inteiro que representa o número de segundos ou milissegundos.

Embora TO_DATE aceite um valor TIMESTAMP, não aceita um valor TIMESTAMP dentro de um VARIANT.

Opcional:

format

Especificador do formato de data para string_expr ou AUTO, que especifica que o Snowflake detecta automaticamente o formato a ser utilizado. Para obter mais informações, consulte Formatos de data e hora em funções de conversão.

O valor padrão é o valor atual do parâmetro de sessão DATE_INPUT_FORMAT (padrão AUTO).

Retornos

O tipo de dados do valor retornado é DATE. Se a entrada for NULL, retorna NULL.

Notas de uso

  • O formato de exibição das datas na saída é determinado pelo parâmetro de sessão DATE_OUTPUT_FORMAT (padrão YYYY-MM-DD).

  • Se o formato do parâmetro de entrada for uma cadeia de caracteres que contenha um número inteiro:

    • Depois que a cadeia de caracteres é convertida em um inteiro, o inteiro é tratado como um número de segundos, milissegundos, microssegundos ou nanossegundos após o início da época Unix (1970-01-01 00:00:00.000000000 UTC).

      • Se o número inteiro for inferior a 31536000000 (o número de milissegundos em um ano), então o valor é tratado como um número de segundos.

      • Se o valor for maior ou igual a 31536000000 e menor que 31536000000000, então o valor é tratado como milissegundos.

      • Se o valor for maior ou igual a 31536000000000 e menor que 31536000000000000, então o valor é tratado como microssegundos.

      • Se o valor for maior ou igual a 31536000000000000, então o valor é tratado como nanossegundos.

    • Se mais de uma linha for avaliada (por exemplo, se a entrada for o nome da coluna de uma tabela que contém mais de uma linha), cada valor será examinado independentemente para determinar se o valor representa segundos, milissegundos, microssegundos ou nanossegundos.

Exemplos

Os exemplos a seguir usam as funções TO_DATE e DATE.

Exemplo básico

SELECT TO_DATE('2024-05-10'), DATE('2024-05-10');
Copy
+-----------------------+--------------------+
| TO_DATE('2024-05-10') | DATE('2024-05-10') |
|-----------------------+--------------------|
| 2024-05-10            | 2024-05-10         |
+-----------------------+--------------------+

Exemplo que extrai a data de um carimbo de data/hora

A função TO_DATE aceita valores TIMESTAMP e cadeias de caracteres no formato TIMESTAMP, mas descarta as informações de horário (horas, minutos e assim por diante).

Criar e carregar a tabela:

CREATE OR REPLACE TABLE date_from_timestamp(ts TIMESTAMP);

INSERT INTO date_from_timestamp(ts)
  VALUES (TO_TIMESTAMP('2024.10.02 04:00:00', 'YYYY.MM.DD HH:MI:SS'));
Copy

Consulte o valor de TIMESTAMP na tabela:

SELECT ts FROM date_from_timestamp;
Copy
+-------------------------+
| TS                      |
|-------------------------|
| 2024-10-02 04:00:00.000 |
+-------------------------+

Consulte o valor de TIMESTAMP na tabela usando a função TO_DATE:

SELECT TO_DATE(ts) FROM date_from_timestamp;
Copy
+-------------+
| TO_DATE(TS) |
|-------------|
| 2024-10-02  |
+-------------+

Exemplos que usam diferentes formatos de entrada

Os exemplos a seguir usam as funções TO_DATE e DATE com diferentes especificações de formato de entrada. O formato da data na saída retornada é determinado pela configuração do parâmetro de sessão DATE_OUTPUT_FORMAT.

SELECT TO_DATE('2024.05.10', 'YYYY.MM.DD'), DATE('2024.05.10', 'YYYY.MM.DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024.05.10', 'YYYY.MM.DD') | DATE('2024.05.10', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-10                       |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('2024-05-10', 'AUTO'), DATE('2024-05-10', 'AUTO');
Copy
+-------------------------------+----------------------------+
| TO_DATE('2024-05-10', 'AUTO') | DATE('2024-05-10', 'AUTO') |
|-------------------------------+----------------------------|
| 2024-05-10                    | 2024-05-10                 |
+-------------------------------+----------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/20/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-20                       |
+-------------------------------------+----------------------------------+

Exemplos que usam diferentes formatos de saída

Os exemplos a seguir mostram os resultados das consultas quando o parâmetro de sessão DATE_OUTPUT_FORMAT está definido como DD-MON-YYYY:

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DD-MON-YYYY';
Copy
SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024-05-10', 'YYYY-MM-DD') | DATE('2024-05-10', 'YYYY-MM-DD') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/10/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+

Exemplos que usam uma cadeia de caracteres com um inteiro

Quando a entrada é uma cadeia de caracteres que contém um número inteiro, a magnitude desse número inteiro afeta se ele é interpretado como segundos, milissegundos etc. O exemplo a seguir mostra como a função escolhe as unidades a usar (segundos, milissegundos, microssegundos ou nanossegundos) com base na magnitude do valor.

Criar e carregar a tabela:

CREATE OR REPLACE TABLE demo1 (
  description VARCHAR,
  value VARCHAR -- string rather than bigint
);

INSERT INTO demo1 (description, value) VALUES
  ('Seconds',      '31536000'),
  ('Milliseconds', '31536000000'),
  ('Microseconds', '31536000000000'),
  ('Nanoseconds',  '31536000000000000');
Copy

Passe as cadeias de caracteres para a função:

SELECT description,
       value,
       TO_TIMESTAMP(value),
       TO_DATE(value)
  FROM demo1
  ORDER BY value;
Copy
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION  | VALUE             | TO_TIMESTAMP(VALUE)     | TO_DATE(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds      | 31536000          | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Milliseconds | 31536000000       | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Microseconds | 31536000000000    | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Nanoseconds  | 31536000000000000 | 1971-01-01 00:00:00.000 | 1971-01-01     |
+--------------+-------------------+-------------------------+----------------+