如何在Oracle SQL中使用一年中的星期几获取日期?
我需要搜索在本周开始之后创建的条目。目前,我通过select to_char(sysdate,'WW') from dual;
来完成一年中的某周,但后来我做不到
select * from table where date > to_date(to_char(sysdate,'WW'), 'WW')
因为我得到了
ORA-01820: format code cannot appear in date input format
01820. 00000 - "format code cannot appear in date input format"
*Cause:
*Action:
答案 0 :(得分:5)
您无需转换为字符串然后返回,可以使用truncate:
select * from table where date > trunc(sysdate,'WW')
详细了解the trunc()
function和how the format model is applied。
请注意,WW给您的日期与一年中的第一天相同,所以现在将给您2020-09-02,也就是星期三-可能不是您期望的。当然,这取决于您的要求,但是您可能希望使用始终从星期一开始的IW,并且会给出2020-09-07。如果您有不同的开始日期,则可以增加或减少一天,例如如果您的一周从星期日开始。
答案 1 :(得分:0)
根据ORA-doc:
ORA-01820:格式代码不能以日期输入格式出现
原因:日期说明中包含无效的格式代码。输入日期时,只能指定以下内容:年,月,日,小时,分钟,秒,儒略日,> A.M./PM。和B.C./A.D。
操作:从日期规范中删除无效的格式代码。
您不能将Weeknum传递给to_date()函数。您可以做的是例如以下
select * from table where date > (next_day(trunc(sysdate), 'SUNDAY') - 7)
基本上,next_day返回满足指定工作日的第一个日期。假设今天是2020-09-07,星期一,next_day将返回您最近的星期日,即2020-09-13,因此您需要减去7以获取当前星期的开始日期。 You can read more about it here