função de data da Oracle
Pergunta
Estou executando o abaixo consulta, ele me retorna o row.However em branco há registros na tabela com upd_time = '12 -Mar-08'.I não entendo por que ele não está retornando a data '12 - MAR-08'.Please me ajudar ??
SELECT br_data.upd_time DE BANKREC.br_data onde br_data.upd_time = '12 -Mar-08' ;
Solução
i não têm acesso a um db oracle no momento, mas eu me lembro usando to_char.
try
SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';
Outras dicas
É provável que upd_time não é exatamente 12-MAR-08. O formato de data não está mostrando o componente de tempo, mas é provavelmente lá (tipo de dados DATE no Oracle pode conter ambos os componentes de data e hora).
Tente isto (que irá permitir que você veja os componentes de tempo):
alter session set nls_date_format='DD-MON-YY HH24:MI:SS';
SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');
É a mesma coisa se você fizer um
SELECT br_data.upd_time FROM BANKREC.br_data
where trunc(br_data.upd_time) = '12-MAR-08';
Pode ser que o upd_time não é uma data, mas um timestamp, então na verdade ele contém, por exemplo, '12 -Mar-08 05:30' o que não seria a mesma coisa. trunc()
remove a parte de tempo do timestamp.
Uma vez que ele não retorna um erro, presumo que ele analisa a data corretamente, mas por outro lado você poderia tentar com to_date('12-MAR-08','DD-MON-YY')
Você deve usar a função da Oracle para converter a cadeia corretamente em uma data usando
to_date('12-MAR-08', 'DD-MMM-YY')
Em seguida, você tem que levar em conta que a "Data" A Oracle tipo de dados também contém informações de tempo para o segundo mais próximo. Isto significa que a data em que foi construído na primeira etapa é realmente meia-noite de 12 de março. Então você tem que ter certeza que o upd_time é truncado para a meia-noite:
trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')
A sua consulta completa torna-se
SELECT br_data.upd_time
FROM BANKREC.br_data
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');
Existem outras maneiras de esfolar este gato (você pode transferir a sua coluna updTime a um campo de char adequada com to_char(upd_time, 'DD-MMM-YY')
), mas é geralmente fazem aconselhável os dados que você está procurando semelhante ao que você pode encontrar no banco de dados que os aumentos suas chances de usar um índice para a pesquisa.