在oracle sql中将一年中的星期转换为日期

时间:2020-09-08 09:32:50

标签: sql oracle datetime where-clause

如何在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:

2 个答案:

答案 0 :(得分:5)

您无需转换为字符串然后返回,可以使用truncate:

select * from table where date > trunc(sysdate,'WW')

详细了解the trunc() functionhow 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