これは、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)
不正解です。週末の日数は、NLS設定に応じて、6と7、または7と1になります。
したがって、(NLS設定に関係なく)PROPERテストはこれまでに述べたものです。
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;
だから、あなたはどの数字が週末であるかを確信しています