19

これは、オラクルの日付が週末かどうかを判断する最良の方法ですか?

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_charfunction.

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

正しくありません!週末の日数は、NLS設定に応じて、6と7、または7と1になります。

したがって、PROPERテスト(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 に答える