【发布时间】:2020-03-20 21:11:55
【问题描述】:
我正在尝试根据我们是否已经过了当月的第一个工作日,将日期过滤到特定范围。
Oracle 似乎不喜欢我使用BETWEEN。
WHEN
TO_DATE(myDate,'YYYYMMDD')=CASE WHEN TO_DATE(SYSDATE-1) - TO_DATE(last_day(add_months(sysdate, -1))+6)>0
THEN
TO_DATE(last_day(add_months(sysdate, -1))+1, 'YYYYMMDD') --AND to_date(TRUNC(SYSDATE) - 1, 'YYYYMMDD')
Else
TO_DATE(last_day(add_months(sysdate, -2))+1, 'YYYYMMDD') --AND to_date(TRUNC(SYSDATE) - 1, 'YYYYMMDD')
END
请告诉我如何纠正这个问题。
【问题讨论】:
-
sysdate返回一个DATE值,请不要使用TO_DATE(SYSDATE-1) -
并且日期应该存储为日期。
myDate是必须转换为日期的字符串吗?希望不会。TO_DATE(myDate,'YYYYMMDD')应该只是myDate或者如果您想删除时间部分:TRUNC(myDate)。
标签: sql oracle date case where-clause