Значение «28 -APR-08» отображается из-за ваших региональных настроек (для получения дополнительной информации обратитесь в Google NLS_DATE_FORMAT).По умолчанию отображается только дата, а не часть времени.Посмотрите на следующий пример:
CREATE TABLE just_a_date(mydate DATE);
Table JUST_A_DATE created.
INSERT INTO just_a_date(mydate) VALUES (SYSDATE);
1 row inserted.
SELECT * FROM just_a_date;
27-SEP-2019
SELECT * FROM just_a_date WHERE mydate = '27-SEP-19';
no rows selected
Это то, что вы видите.Тип данных Oracle DATE хранит как DATE, так и TIME с точностью до секунды.Давайте подробнее рассмотрим данные в таблице just_a_date, используя маску формата.
SELECT TO_CHAR(mydate, 'DD-MON-YYYY HH24:MI:SS') FROM just_a_date;
27-SEP-2019 14:50:51
Ну вот, пожалуйста.В этом есть доля времени.Если вы запросите mydate = '27-SEP-19'
, Oracle косвенно преобразует его в 27-SEP-2019 00:00:00
, и вы не получите строк.Вы получите строки, если укажете часть времени с точностью до секунды.
SELECT * FROM just_a_date WHERE mydate = TO_DATE('27-SEP-2019 14:50:51','DD-MON-YYYY HH24:MI:SS');
27-SEP-2019
Или ... если вам не нужна часть времени, вы можете использовать функцию TRUNC.Это удалит часть времени из столбца DATE.
SELECT * FROM just_a_date WHERE TRUNC(mydate) = TO_DATE('27-SEP-2019','DD-MON-YYYY');
27-SEP-2019