- Categorias:
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:
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> ) Argumentos¶
Obrigatório:
Uma das opções:
string_exprCadeia de caracteres da qual se pode extrair uma data. Por exemplo:
'2024-01-31'.timestamp_exprUma 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_exprUma 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:
formatEspecificador do formato de data para
string_exprou 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'); +-----------------------+--------------------+ | 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')); Consulte o valor de TIMESTAMP na tabela:
SELECT ts FROM date_from_timestamp; +-------------------------+ | 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; +-------------+ | 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'); +-------------------------------------+----------------------------------+ | 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'); +-------------------------------+----------------------------+ | 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'); +-------------------------------------+----------------------------------+ | 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'; SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD'); +-------------------------------------+----------------------------------+ | 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'); +-------------------------------------+----------------------------------+ | 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'); Passe as cadeias de caracteres para a função:
SELECT description, value, TO_TIMESTAMP(value), TO_DATE(value) FROM demo1 ORDER BY value; +--------------+-------------------+-------------------------+----------------+ | 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 | +--------------+-------------------+-------------------------+----------------+