如果我通过Oracle SQL知道年数和周数,如何获取开始日期?
如果我提供年和周编号,如何通过Oracle SQL获取开始日期?如果我通过Oracle SQL知道年数和周数,如何获取开始日期?,sql,oracle,Sql,Oracle,如果我提供年和周编号,如何通过Oracle SQL获取开始日期? 例如,给出2014年和第1周,获取日期2014-01-05。并不是那么简单,但下一天功能在这里有帮助: select next_day(to_date(&year||'01-01','yyyy-mm-dd'), 'SUN') + 7 * (&week-1) from dual; 感谢Alex Poole指出。。。 next_day函数的第二个参数是NLS特定的,这是周初的概念。因此,您必须
例如,给出2014年和第1周,获取日期2014-01-05。并不是那么简单,但下一天功能在这里有帮助:
select
next_day(to_date(&year||'01-01','yyyy-mm-dd'), 'SUN')
+ 7 * (&week-1)
from dual;
感谢Alex Poole指出。。。
next_day函数的第二个参数是NLS特定的,这是周初的概念。因此,您必须在会话中使用NLS设置,并考虑您的解决方案到其他国家/地区的潜在可移植性。您可以根据需要修改年份,查询将列出该年每周第一个星期日的所有日期
当您提供周数和年份时,应返回哪个日期?这是该周的第一天还是如何开始的?根据哪种日历系统是2014-01-05第一周的开始?美国周数?因为下一天对NLS敏感,所以日期名称/缩写必须使用会话的日期语言。是的,@AlexPoole,你说得对。我忘了提了,谢谢。
SQL> SELECT YEAR,
2 week,
3 next_day(to_date(YEAR
4 ||'01-01','yyyy-mm-dd'), 'SUN') + (week-1)* 7
5 FROM
6 (SELECT '2014' YEAR, ROWNUM week FROM all_objects WHERE ROWNUM <= 53
7 )
8 /
YEAR WEEK NEXT_DAY(
---- ---------- ---------
2014 1 05-JAN-14
2014 2 12-JAN-14
2014 3 19-JAN-14
2014 4 26-JAN-14
2014 5 02-FEB-14
2014 6 09-FEB-14
2014 7 16-FEB-14
2014 8 23-FEB-14
2014 9 02-MAR-14
2014 10 09-MAR-14
2014 11 16-MAR-14
2014 12 23-MAR-14
2014 13 30-MAR-14
2014 14 06-APR-14
2014 15 13-APR-14
2014 16 20-APR-14
2014 17 27-APR-14
2014 18 04-MAY-14
2014 19 11-MAY-14
2014 20 18-MAY-14
2014 21 25-MAY-14
2014 22 01-JUN-14
2014 23 08-JUN-14
2014 24 15-JUN-14
2014 25 22-JUN-14
2014 26 29-JUN-14
2014 27 06-JUL-14
2014 28 13-JUL-14
2014 29 20-JUL-14
2014 30 27-JUL-14
2014 31 03-AUG-14
2014 32 10-AUG-14
2014 33 17-AUG-14
2014 34 24-AUG-14
2014 35 31-AUG-14
2014 36 07-SEP-14
2014 37 14-SEP-14
2014 38 21-SEP-14
2014 39 28-SEP-14
2014 40 05-OCT-14
2014 41 12-OCT-14
2014 42 19-OCT-14
2014 43 26-OCT-14
2014 44 02-NOV-14
2014 45 09-NOV-14
2014 46 16-NOV-14
2014 47 23-NOV-14
2014 48 30-NOV-14
2014 49 07-DEC-14
2014 50 14-DEC-14
2014 51 21-DEC-14
2014 52 28-DEC-14
2014 53 04-JAN-15
53 rows selected.
SQL>