OracleのTO_CHAR()関数で平日を判定する
次の例では、TO_CHAR()を使って日付が平日にあたる行のみを返す方法を示します。
SELECT order_id, order_date
FROM orders
WHERE TO_CHAR(order_date, 'DY') NOT IN ('SAT', 'SUN');
出力例:
ORDER_ID | ORDER_DATE
---------|------------
1001 | 04-SEP-2023
1002 | 05-SEP-2023
1005 | 06-SEP-2023
1010 | 07-SEP-2023
このクエリでは:
-
TO_CHAR(order_date, 'DY')がorder_date列から曜日の略称を取り出します。 NOT IN ('SAT', 'SUN')句で、土曜日または日曜日にあたる行を除外します。
曜日の正式名を使う
データベースのロケールによって曜日の略称が異なる場合や、正式な曜日名を使いたい場合は、次のようにクエリを変更できます:
SELECT employee_id, work_date
FROM employee_schedule
WHERE TO_CHAR(work_date, 'DAY') NOT IN ('SATURDAY', 'SUNDAY');
出力例:
EMPLOYEE_ID | WORK_DATE
------------|-----------
200 | 01-SEP-2023
201 | 02-SEP-2023
202 | 03-SEP-2023
2つの日付の間の平日を抽出する
2つの日付の間のレコードを、平日分だけ取得したいこともよくあります。そのためにロジックを拡張する方法は次のとおりです。
クエリ例: 2つの日付の間の平日を抽出する
SELECT invoice_id, invoice_date
FROM invoices
WHERE invoice_date BETWEEN TO_DATE('2023-09-01', 'YYYY-MM-DD')
AND TO_DATE('2023-09-10', 'YYYY-MM-DD')
AND TO_CHAR(invoice_date, 'DY') NOT IN ('SAT', 'SUN');
出力例:
INVOICE_ID | INVOICE_DATE
-----------|--------------
3001 | 01-SEP-2023
3005 | 04-SEP-2023
3007 | 05-SEP-2023
3010 | 06-SEP-2023
異なる言語やロケールへの対応
Oracleは、セッションのNLS(National Language Support)設定に基づいて曜日名を表示する場合があります。たとえば、セッションの言語が英語以外に設定されていると、‘MON’や‘TUE’といった曜日の略称が異なることがあります。現在の設定は次のコマンドで確認できます:
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TERRITORY';
必要に応じて、セッションレベルでこれらの設定を上書きし、一貫した結果を得ることができます:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
これによりテリトリーが‘AMERICA’に設定され、‘MON’、‘TUE’などの曜日名が使われるようになります。
NEXT_DAY()関数を使う
指定した日付から次の平日を算出したい場合もあります。OracleのNEXT_DAY()関数を使うと、特定の曜日が次に来る日付を求められます。
クエリ例: 次の平日を求める
SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday
FROM dual;
出力例:
NEXT_MONDAY
------------
11-SEP-2023
この例では、NEXT_DAY(SYSDATE, 'MONDAY')が現在の日付の次の‘Monday’を返します。
まとめ
Oracle SQLで平日を抽出することは、多くのアプリケーションでよくある要件です。TO_CHAR()関数で曜日を取り出して週末を除外すれば、平日のみを扱えます。より複雑なケースでは、NEXT_DAY()などの関数と日付範囲を組み合わせて、高度なクエリを作成できます。
こちらの記事もおすすめです:
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studioは、以前のSQLワークフローを完全に置き換えてくれました。高速で直感的で、データベース作業がまた楽しくなりました。」
「多くのデータベースGUIを試してきましたが、Beekeeperは機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」