сравнение текущего дня типа Date со столбцом дня Varchar в Oracle - PullRequest
2 голосов
/ 12 августа 2010

У меня есть столбец дня Varchar, и я хотел бы выбрать все строки, в которых столбец день из дня совпадает с текущим днем ​​в системе.Я пришел с этим запросом, но он не нашел соответствия, хотя сегодня четверг и четверг, сохраненный в столбце дня.Я не уверен, что это правильный способ сравнить тип данных даты с varchar.

select * from schedule
where day = (select to_char(sysdate,'day') from dual);

Ответы [ 2 ]

9 голосов
/ 12 августа 2010

Мне кажется, проблема в том, что функции to_char по умолчанию дополняются пробелами:

SQL> SELECT '.' || to_char(SYSDATE + rownum, 'day') || '.' AS "Day"
  2    FROM dual CONNECT BY LEVEL <= 5;

Day
-----------
.friday   .
.saturday .
.sunday   .
.monday   .
.tuesday  .

Чтобы предотвратить заполнение, используйте префикс fm:

SQL> select * from dual where to_char(sysdate, 'fmday')='thursday';

DUMMY
-----
X

Также обратите внимание, что сравнение VARCHAR чувствительно к регистру.

1 голос
/ 12 августа 2010

Ваш запрос выглядит разумным для меня, я бы дважды проверил, что to_char (sysdate, 'day') действительно возвращает четверг, как вы ожидаете.

Кстати, в этом случае вам не нужно использовать подзапрос. Более простой, но эквивалентный запрос:

select * from schedule where day = to_char(sysdate, 'day');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...