Eu tenho uma tabela que armazena um timestamp unix. Para consultar isso como uma data, estou tentando converter esse carimbo de data/hora em um tipo de data e hora em uma exibição. Infelizmente, só consigo obter a parte DATE.
Este link descreve como fazer a conversão, mas requer a alteração nls_date_format
para incluir a parte do tempo. O padrão atualmente mostra apenas a parte da data. Preciso da data e hora.
Infelizmente, essa solução só funciona em nível de sessão. Como desenvolvedor, prefiro não ter que correr para nosso provedor de serviços gerenciados para pedir que alterem o valor no nível do banco de dados - especialmente porque isso pode afetar outros aplicativos.
Existe uma maneira de converter o timestamp, em sql, para um datetime sem modificar o sistema?
o resultado da expressão
é um valor do tipo de dados oracle DATE. Este tipo contém data e hora. Se você deseja exibir esse valor para um usuário, deve convertê-lo em uma string. Essa conversão pode ser feita por um aplicativo ou você pode deixar o oracle convertê-lo para um tipo string como é feito neste exemplo. Essa conversão automática para o oracle stringtype VARCHAR2 é controlada por nls_date_format e algumas configurações do servidor. Se você deseja que sua visualização retorne um valor VARCHAR2 com a data calculada no formato 'AAAA-MM-DD HH24:MI:SS' e não um valor DATE, você pode fazer isso usando uma função de conversão: expressão
Mas neste caso o valor de retorno da visão é um VARCHAR2 e não um valor DATE.
A melhor prática é evitar chamadas de função não SQL dentro de consultas SQL, pois a função pode não estar disponível universalmente - no meu sistema não há função numtodsinterval - também devido à sobrecarga adicional para alternar o contexto de SQL para PL/SQL e, em seguida, de volta ao SQL para cada linha retornada ou testada se a função for chamada na cláusula where.
Aqui está uma solução somente SQL.
Observe que o resultado é um valor Oracle DATE que contém também o TIME. Se não parecer ter TIME quando você executar a consulta, o problema está em seu NLS_DATE_FORMAT ou na implementação de sua interface do usuário de conversão de datas em strings. Certifique-se de fazer TO_CHAR você mesmo com a parte de tempo na string de formato para ver o valor inteiro. ex: TO_CHAR(a_date, 'aaaa-mm-dd hh24:mi:ss')
Eu usei outro número para calcular esse valor.
Este script funciona bem para mim.
Se o unix_timestamp deve ser comparado a algum intervalo de datas na cláusula WHERE, é melhor converter as datas em unix_timestamps em vez de converter todos os valores unix_timestamp em datas.
Por exemplo, o seguinte pode localizar as linhas com UNIX_TIMESTAMP entre a data de início e a data de término especificadas.
Isso também permitirá que um índice no UNIX_TIMESTAMP seja usado, se houver um.