【发布时间】:2023-02-08 18:26:03
【问题描述】:
我在 Varchar 中有一个名为 received_dt_key 的列,格式为 DD-MM-YYYY(例如 30-07-2021)。
我想从表格中选择 31-12-2021 和 01-01-2022 之间的所有日期。我已经尝试了以下查询的版本,输出是一个空白表。
SELECT *
FROM SD_BDAY
WHERE to_char(to_date(RECEIVED_DT_KEY, 'DD-MM-YYYY')) > to_char(to_date('31-12-2021', 'DD-MM-YYYY'))
and to_char(to_date(RECEIVED_DT_KEY, 'DD-MM-YYYY')) < to_char(to_date('01-01-2022', 'DD-MM-YYYY'));
【问题讨论】:
-
正如your previous question 告诉您的那样,将日期与日期进行比较——不要再次将它们转换回字符串。您在会话的 NLS_DATE_FORMAT 中作为字符串进行比较。删除所有
to_char()调用,看看会发生什么。 (为什么要将日期存储为字符串?这是不好的做法。) -
嗨,亚历克斯,抱歉,是的,我试过了,但桌子还是空白的。不幸的是,这是一张非常旧的桌子。
-
那么,无论您的数据如何,都不会同时存在 > 2021-12-31 和 < 2022-01-01 - 它们是互斥的。
标签: sql oracle date between to-date