Funções de Conversão Adicionais

TO_TIMESTAMP

TO_TIMESTAMP(c, format_model, nls_parms)

Parâmetros: c é um tipo de dados de caractere (obrigatório); format_model deve definir o formato de c correspondente aos elementos do modelo de formato TIMESTAMP (opcional).
O requisito padrão é que c deve estar no formato TIMESTAMP.
O valor nls_parms é o mesmo parâmetro que você viu anteriormente com a função TO_NUMBER.

Processo: converte dados c no tipo de dados TIMESTAMP, que difere de DATE, pois inclui segundos fracionários. O parâmetro format_model define o padrão das informações de data de c para a função, para que os vários elementos do TIMESTAMP sejam identificados – informações para ano, mês, dia, horas, minutos, segundos e segundos fracionários. Saída: um valor no tipo de dados TIMESTAMP.

Exemplo: Aqui está uma representação de caractere de uma data. O modelo de formato é incluído para definir o padrão e informar a função TIMESTAMP onde estão as informações DD, onde estão as informações MON e assim por diante.

SELECT TO_TIMESTAMP('2020-JAN-01 13:34:00:023432',
'RRRR-MON-DD HH24:MI:SS:FF') HORA_EVENTO
FROM DUAL

Resultado: 01-JAN-20 01.34.00.023432 PM

TO_TIMESTAMP('09-17-2019 12:00:00AM','MM-DD-YYYY HH:MI:SSAM')
Resultado: '17-SEP-19 12.00.00.000000 AM'

TO_TIMESTAMP_TZ

Sintaxe: TO_TIMESTAMP_TZ(c, format_model, nls_parms)

Parâmetros: c é uma cadeia de caracteres (obrigatório). O valor format_model deve definir o formato de c correspondente aos elementos do modelo de formato TIMESTAMP WITH TIME ZONE (opcional). O requisito padrão é que c deve estar no formato TIMESTAMP. O valor opcional nls_parms é o mesmo parâmetro que você viu anteriormente com a função TO_NUMBER.

Processo: transforma c em um valor de TIMESTAMP WITH TIME ZONE, em que format_model define o formato no qual c armazena as informações de TIMESTAMP WITH TIME ZONE. O fuso horário será padronizado para o definido pelo parâmetro SESSION.

Saída: um valor no tipo de dados TIMESTAMP WITH TIME ZONE. Exemplo: Converta a cadeia de caracteres ’17-04-2016 16:45:30′ em um tipo de dados TIMESTAMP WITH TIME ZONE, fornecendo uma máscara de formato.

SELECT TO_TIMESTAMP_TZ('2019-SEP-17 09:49:59AM',
'YYYY-MON-DD HH:MI:SSAM') HORA_FUSO_HORARIO
FROM DUAL;
Resultado = 17-SEP-19 09.49.59.000000 AM US/PACIFIC

TO_TIMESTAMP_TZ('22-03-2019 01:00:00 -8:00', 'DD-MM-YYYY HH:MI:SS TZR') = 22-MAR-19 01.00.00.000000 AM -08:00

O TIMESTAMP WITH TIME ZONE é uma variante do TIMESTAMP que inclui um deslocamento de fuso horário ou o nome da região de fuso horário em seu valor. O deslocamento do fuso horário é a diferença (em horas e minutos) entre a hora local e a UTC (Hora Universal Coordenada, antiga Hora Média de Greenwich). Especifique o tipo de dados TIMESTAMP WITH TIME ZONE da seguinte maneira:

TO_YMINTERVAL

Sintaxe: TO_YMINTERVAL (‘y-m’)

Parâmetros: y e m são números contidos em uma string (obrigatório). Processo: Transforma y e m em anos e meses em um formato do tipo de dados INTERVAL YEAR TO MONTH.

Saída: um valor no tipo de dados INTERVAL YEAR TO MONTHS. Exemplo: Converta a expressão de caractere que mostra quatro anos e seis meses no tipo de dados INTERVAL YEAR TO MONTHS.

SELECT TO_YMINTERVAL('04-06') HORA_EVENTO FROM DUAL

Resultado: '+000000004-06'

TO_DSINTERVAL

Sintaxe: TO_DSINTERVAL (sql_format, nls_parms)

Parâmetros: sql_format é uma cadeia de caracteres no formato necessário para o Intervalo de dia para segundo tipo de dados, que é ‘DAYS HH24: MI: SS.FF’.
Por exemplo, ’15 14:05:10.001′ é o DIA INTERVALO PARA O SEGUNDO
representação por 15 dias, 14 horas, 5 minutos e 10.001 segundos.
O valor nls_parms é o mesmo parâmetro que você viu anteriormente com o Função TO_NUMBER.

SELECT TO_DSINTERVAL('40 08:30:00.03225') EVENT_TIME FROM DUAL
Resultado: +000000040 08:30:00.032250000

NUMTOYMINTERVAL

Sintaxe: NUMTOYMINTERVAL (n, interval_unit )

Parâmetros: n = número (obrigatório). interval_unit = um dos seguintes valores: ‘YEAR’ ou ‘MONTH’.
Processo: converte informações de data em formato numérico em um valor de intervalo de tempo.

Saída: um valor no tipo de dados INTERVAL YEAR TO MONTH. Exemplo: O exemplo a seguir pega o número 27 e o transforma em um valor que representa um intervalo de tempo de 27 meses, que equivale a 2 anos e 3 meses, no tipo de dados INTERVAL YEAR TO MONTH. O valor 2-3 mostra que 2 anos e 3 meses é a quantidade de tempo resultante.

NUMTOYMINTERVAL(28, 'MONTH')= +02-04
NUMTOYMINTERVAL(28, 'YEAR')= +28-00

NUMTODSINTERVAL

Sintaxe: NUMTODSINTERVAL (n, interval_unit)

Parâmetros: n = número (obrigatório).
interval_unit = um dos seguintes: ‘DIA’, ‘HORA’, ‘MINUTO’ ou ‘SEGUNDO’.
Processo: converte informações de data em formato numérico em um valor de intervalo de Tempo.
Saída: um valor do tipo de dados INTERVAL DAY TO SECOND.

Exemplo: O exemplo a seguir converte 36 horas em sua representação formal de 1 dia e 12 horas no tipo de dados INTERVAL DAY TO SECOND, que exibe um único número por dia, seguido por horas, minutos, segundos e segundos fracionários.

numtoDSinterval(24, 'DAY') = +000000024 00:00:00.000000000
numtoDSinterval(24, 'HOUR') = +000000001 00:00:00.000000000
numtoDSinterval(24, 'MINUTE') = +000000000 00:24:00.000000000
numtoDSinterval(24, 'SECOND') = +000000000 00:00:24.000000000

CAST

Sintaxe: CAST (e AS d)

Parâmetros: e é uma expressão; d é um tipo de dados.
Processo: converte e para d. Isso é particularmente útil para converter representações de texto de informações de data e hora em formatos de data e hora, particularmente TIMESTAMP WITH LOCAL TIME ZONE.

Saída: um valor no tipo de dados d.
Exemplo: a seguir, convertemos um valor no formato padrão TIMESTAMP, apresentado como um valor literal:

select CAST('19-JAN-16 11:35:30' AS TIMESTAMP WITH LOCAL TIME ZONE) "Converted LTZ"
FROM DUAL

Resultado: 19-JAN-16 11.35.30.000000 AM

A consulta abaixo transforma o texto 19-JAN-16 11:35:30PM +08:00 em formato TIMESTAMP WITH TIME ZONE gravando o fuso horário +08:00 após isso a função CAST transforma esse horário no formato TIMESTAMP WITH LOCAL TIME ZONE, dessa forma pega o fuso horário que estava salvo +08:00 e converte para horário local: 11:35:30 + 08:00:00 = 07:35:30 AM.

SELECT CAST(
TO_TIMESTAMP_TZ(
'19-JAN-16 11:35:30PM +08:00','DD-MM-YY HH:MI:SSPM TZR'
) AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM DUAL
Resultado: ’19-JAN-16 07.35.30.000000 AM’

Referência

OCA Oracle Database SQL Exam 1Z0-071. páginas 347 – 351
Datetime Datatypes and Time Zone Support