确定Oracle日期是否在周末?

Mar*_*eon 16 oracle plsql date weekend

这是确定Oracle日期是否在周末的最佳方式吗?

select * from mytable
where 
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Run Code Online (Sandbox Code Playgroud)

nin*_*ded 27

从Oracle 11g开始,是的.我见过的唯一可行的区域不可知替代方案如下:

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
Run Code Online (Sandbox Code Playgroud)


Gur*_*uru 8

不是问题的答案.但还有一些信息.日期还有更多SQL技巧.

to_char(sysdate, 'd') --- day of a week, 1,2,3 .. to 7
to_char(sysdate, 'dd') --- day of a month, 1,2,3 .. to 30 or 31
to_char(sysdate, 'ddd') --- day of a year, 1,2,3 .. to 365 or 366
to_char(sysdate, 'w') --- week of a month, 1,2,3,4 or 5
to_char(sysdate, 'ww') --- week of a year, 1,2,3 .. to 52
Run Code Online (Sandbox Code Playgroud)

更多这里:to_char功能.

  • 这些都没有解决问题,第一个是危险的,因为"星期几"依赖于地区,例如:1 =美国的星期日,英国的星期一. (7认同)

小智 6

MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
Run Code Online (Sandbox Code Playgroud)

是不正确的!周末的天数可能是 6 和 7,或者 7 和 1,具体取决于 NLS 设置。

因此,正确的测试(无论 NLS 设置如何)就是前面提到的:

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Run Code Online (Sandbox Code Playgroud)

  • 我认为你在这里可能是不正确的,“J”格式代表儒略日期,即自固定时间点以来的天数,并且完全独立于 NLS 设置。请参阅这篇文章以供参考:http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number (2认同)