简体   繁体   中英

Convert week of the year to date in oracle sql

How can I get a date using the week of the year in Oracle SQL?

I need to search for entries created after the beginning of the current week. Currently, I get the week of the year by doing select to_char(sysdate,'WW') from dual; , but then I can't do

select * from table where date > to_date(to_char(sysdate,'WW'), 'WW') because I get

ORA-01820: format code cannot appear in date input format
01820. 00000 -  "format code cannot appear in date input format"
*Cause:    
*Action:

You don't need to convert to a string and back, you can use truncate:

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

Read more about the trunc() function and how the format model is applied .

Notice that WW gives you the same day as the first day of the year, so right now that would give 2020-09-02, which is a Wednesday - possibly not what you'd expect. It depends on your requirements of course, but you might want to work with IW which always starts from Monday, and would give 2020-09-07. If you have a different start day you can add or subtract a day, eg if your week starts on Sunday.

According to ORA-doc:

ORA-01820: format code cannot appear in date input format

Cause: A date specification contained an invalid format code. Only the following may > be specified when entering a date: year, month, day, hours, minutes, seconds , Julian day, > AM/PM and BC/AD

Action: Remove the invalid format code from the date specification.

You can't pass the weeknum to to_date() function. What you can do is eg, the following

select * from table where date > (next_day(trunc(sysdate), 'SUNDAY') - 7)

Basically, next_day returns first date that meets specified weekday. Let's assume it's Monday 2020-09-07, next_day will return you the closest SUNDAY in the future, that is 2020-09-13, so you need to substract 7 to get date of the current week beginning. You can read more about it here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM