这是确定某个Oracle日期是在一个周末的最佳方式?

select * from mytable
where 
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
有帮助吗?

解决方案

作为Oracle 11g的,是的。唯一可行的区域无关的替代方案,我所看到的是,如下所示:

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 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 功能

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

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

因此,适当的测试(不论NLS-设置)是这一个前面提到的:

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

在我看来,最好的选择就是

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

前组NLS_TERRITORY

alter session set NLS_TERRITORY=SWEDEN;

那么,你是知道哪个号码是周末

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top