19

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

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

5 回答 5

29

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

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
于 2010-08-10T16:17:06.780 回答
9

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

于 2010-08-10T16:26:01.647 回答
4
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)

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

所以正确的测试(不考虑 NLS 设置)就是前面提到的这个:

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
于 2012-12-19T13:08:03.863 回答
3

在我看来,最好的选择是

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

于 2014-03-27T20:56:24.540 回答
1

之前设置 NLS_TERRITORY

alter session set NLS_TERRITORY=SWEDEN;

所以你确定哪些数字是周末

于 2012-09-06T14:57:08.250 回答