我在两年之间没有获得数据,下面是条件之间
to_char(Wfc.APPLYDTM,'MM/DD/YYYY') between '12/11/2019' and '01/10/2020'
但我获得的是"12/11/2019"和"12/31/2019"和"01/11/2020"和"01/01/2020"之间的数据,而不是两个不同年份之间的数据。
请帮忙
尝试使用TO_DATE
而不是TO_CHAR
,然后与有效的 Oracle 日期文本进行比较:
SELECT *
FROM Wfc
WHERE TO_DATE(APPLYDTM, 'MM/DD/YYYY') BETWEEN date '2019-12-11' AND date '2019-01-10';
请注意,如果APPLYDTM
已经是日期,则无需致电TO_DATE
。 如果您打算将其用作日期,则将数据转换为字符是没有意义的。
您应该将数据转换为Date
以便能够正确比较。
主要思想是您应该比较date
值而不是string
值。
to_date(Wfc.APPLYDTM,'MM/dd/yyyy') between to_date('12/11/2019','MM/dd/yyyy') and to_date('01/10/2020','MM/dd/yyyy')
阅读此处了解更多详情。
不要将日期/时间值转换为字符串! 使用内置功能。
您的逻辑最简单地表示为:
Wfc.APPLYDTMbetween >= DATE '2019-12-11' AND
Wfc.APPLYDTMbetween < DATE '2020-01-11'
请注意,日期常量是使用DATE
关键字提供的。 这应该是ISO 8601标准日期格式(很高兴!
另请注意使用>=
和<
而不是BETWEEN
。 Oracle 中的date
数据类型可以包含时间部分 - 即使您在查询表时看不到它。 这可确保所有日期/时间都包含在范围内。
作为一个额外的好处,这可以使用索引(APPLYDTMbetween)
. 使用函数通常排除使用索引,除非您定义了基于函数的索引。