确定Oracle日期是否在周末?

时间:2010-08-10 16:02:48

标签: oracle date plsql weekend

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

select * from mytable
where 
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');

5 个答案:

答案 0 :(得分:27)

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

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);

答案 1 :(得分:7)

不是问题的答案。但还有一些信息。日期还有更多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

更多信息:to_char功能。

答案 2 :(得分:3)

MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)

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

所以PROPER测试(不论NLS设置如何)都是之前提到的:

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')

答案 3 :(得分:1)

之前设置NLS_TERRITORY
alter session set NLS_TERRITORY=SWEDEN;

所以你确定哪些号码是周末

答案 4 :(得分:1)

在我看来,最好的选择是

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')