Сравните два столбца даты в SQL Oracle

У меня есть два столбца, которые хранятся как «MM/DD/YYYYY HH:MM:SS AM (или PM)». Я могу использовать «TO_CHAR», чтобы изменить его на формат «MM/DD/YYYY», но после того, как я это получу, мне нужны только даты, когда оба столбца не равны друг другу (после TO_CHAR). Я использовал '!=', но это не работает и по-прежнему возвращает строки, когда обе даты равны друг другу. В основном я хочу, чтобы поля игнорировали время и возвращали строку только в том случае, если обе даты разные.

Вот запрос, который я пытался выполнить:

select r.project_name, to_char(r.created_on, 'MM/DD/YYYY'),
       to_char(r.project_opened_on_date, 'MM/DD/YYYY')
from wh_project_repo r
where r.created_on != r.project_opened_on_date

Любая помощь, пожалуйста?


person confusedbeginner    schedule 18.03.2017    source источник


Ответы (1)


Не имеет смысла хранить даты в виде строки. Но вы делаете это.

Поскольку у вас есть строки, нет необходимости преобразовывать их в даты. Как насчет того, чтобы сделать:

select r.project_name, to_char(r.created_on, 'MM/DD/YYYY'),
       to_char(r.project_opened_on_date, 'MM/DD/YYYY')
from wh_project_repo r 
where substr(r.created_on, 10) <> substr(r.project_opened_on_date, 10)

Однако проблема с вашим запросом заключается в том, что манипуляции находятся в файле select. Это не влияет на то, что сравнивается в предложении where.

РЕДАКТИРОВАТЬ:

Вы можете также сравнить значения как даты, выполнив следующие действия:

where to_char(r.created_on, 'MM/DD/YYYY') <> to_char(r.project_opened_on_date, 'MM/DD/YYYY')

Проблема не в сравнении строк. Проблема в том, что функции в select не влияют на where.

person Gordon Linoff    schedule 18.03.2017
comment
Потрясающий. Я вижу вашу точку зрения и объяснение. Итак, если я хочу сравнить строки, мне нужно будет использовать всю строку, верно? Скажем, мне нужен другой запрос, в котором мне нужны все строки, которые не равны 01/01/2017, но, поскольку моя дата хранится в виде строки, нужно ли мне изменить дату во внутреннем запросе, а затем запустить запрос на основе от этого запроса снаружи? - person confusedbeginner; 18.03.2017
comment
Благодарю вас! ваше объяснение было идеальным! Полностью понять это сейчас. - person confusedbeginner; 18.03.2017