Как выбрать дату в PLSQL? - PullRequest
       2

Как выбрать дату в PLSQL?

0 голосов
/ 27 сентября 2019

У меня есть столбец с DATA_TYPE = DATE.Когда я запрашиваю таблицу, примером данных из этого столбца является

28-APR-08

Так что я пытаюсь сделать запрос следующим образом:

select * from mytable where mydatecolumn = '28-APR-08'

Это ничего не возвращает.Я также попробовал это:

select * from mytable where mydatecolumn = TO_DATE('2008/04/28', 'yyyy/mm/dd')

Это также ничего не возвращает.Что я делаю неправильно?Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 сентября 2019

Значение «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
0 голосов
/ 27 сентября 2019

Барбарос дал идеальное решение, но я думаю, что мы можем добавить гораздо больше описания.

Когда используются двухзначные годы, ниже следует поведение rr и yy:

  • р-р :

50-99 интерпретируются как 1950-1999 гг., Т. Е. даты предыдущего столетия , а даты, заканчивающиеся на 00-49:интерпретируется как 2000-2049, то есть даты текущего столетия .

  • гг:

В случае гг, естьтакого описания нет, и в нем хранится от 2000 до 2099 для 00-99, т.е. только даты текущего столетия .

Несколько примеров:

To_date('20-07-89', 'dd-mm-yy') --> 20 july, 2089
To_date('20-07-89', 'dd-mm-rr') --> 20 july, 1989

To_date('20-07-19', 'dd-mm-yy') --> 20 july, 2019
To_date('20-07-19', 'dd-mm-rr') --> 20 july, 2019

Cheers !!

0 голосов
/ 27 сентября 2019

Элемент формата даты и времени RR аналогичен элементу формата даты и времени YY, но обеспечивает дополнительную гибкость для хранения значений даты в других столетиях.Элемент формата даты и времени RR позволяет хранить даты 20-го века в 21-м веке, указав только две последние цифры года.

Итак, используйте 'DD-MON-RR' в качестве формата даты для вашего случая:

select * from mytable where mydatecolumn = to_date('28-APR-08','DD-MON-RR')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...