сравнение даты в оракуле за год заканчивается на 00 - PullRequest
0 голосов
/ 16 декабря 2011

Дата, хранящаяся в моей базе данных, 01-01-1900 для поля emp_doj(Data Type DATE).

Но при получении данных это значение равно 01-jan-00, даже если отформатировано с помощью dd-mm-yyyy.

Я сравниваю извлеченное поле даты с какой-либо другой датой в запросе SQL.

select *
form persons
where per_join = to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY')

Здесь значение to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY') приводит к 01-01-00 вместо 01-01-1900

Ответы [ 3 ]

4 голосов
/ 16 декабря 2011

Я подозреваю, что ваши настройки NLS по умолчанию для используемой вами среды IDE просто отображают даты с двузначным годом. Oracle не хранит даты в каком-либо определенном формате. Он хранит их в двоичном формате внутри.

Поэтому я предлагаю вам проверить настройки вашей IDE и / или базы данных, и вы увидите, что формат даты NLS установлен на DD-MM-YY, измените его и установите на DD-MM-YYYY, и вы увидите даты, которые вы хотите увидеть их.

Что касается вашего запроса, зачем использовать TO_CHAR, а затем TO_DATE? Если emp_doj является полем даты, а per_join также датой, просто сравните их непосредственно на равенство. Если вы пытаетесь отрезать часть времени от значений emp_doj, просто используйте TRUNC().

Для примеров и ссылок на NLS: http://www.orafaq.com/wiki/NLS

Подробнее здесь: http://www.oracle.com/technetwork/database/globalization/nls-lang-099431.html

0 голосов
/ 16 декабря 2011

У меня есть несколько временных решений, в настоящее время это работает для меня, я просто изменил свой запрос на выборку

select *
form persons
where  to_date(per_join,'DD-MM-YYYY')= to_date(i.emp_doj,'DD-MM-YYYY')
0 голосов
/ 16 декабря 2011
select to_char(emp_doj,'dd-mm-yyyy') from yourtable
...