T-SQL: 日付から日本語の曜日「月・火・水・木・金・土・日」を取得する方法
日付から日本語の曜日「月・火・水・木・金・土・日」を取得する
SQL Server を使って、日本のクライアントのシステム開発していると、日付から日本語の曜日を取得したい時があります。
今回はそんな時に使える、日付から日本語の曜日「月・火・水・木・金・土・日」を取得する方法を何個かご紹介します。
FORMAT 関数を使って日本語の曜日を取得する
SQL Server の FORMAT 関数は、指定した値をフォーマットした文字列にしてくれる関数です。
変換する際にカルチャーを指定することもできます。
SQL Server 2012 以降で利用できます。
FORMAT 関数の基本構文は以下の通りです。
FORMAT( value , format [ , culture ] )
value には、変換する値を指定します。数値や日付系のデータ型が指定できます。
format には、どうフォーマットするかを、有効な .NET Framework の書式指定文字列で指定します。
culture はオプショナルで、現在のセッションのカルチャーとは違うカルチャーを指定してフォーマットしたい時に指定します。
この FORMAT 関数を使って、日付から日本語の曜日「月・火・水・木・金・土・日」を取得するには次のようにできます。
DECLARE @Date1 DATE = '2025-07-25'; SELECT @Date1 AS Date1, FORMAT(@Date1, 'ddd', 'ja-JP') AS DayOfWeek_JP;
[実行結果]
第二引数に 'ddd' を指定すると曜日が取得できます。 'ddd' と指定すると「金」のように短縮された曜日が、'dddd' と指定すると「金曜日」のように完全な曜日が取得できます。
第三引数に 'ja-JP' を指定して日本語の曜日を取得できるようにしています。
第三引数は、現在のカルチャーが既に日本の場合は指定しなくて大丈夫です。
ちなみに現在のカルチャー (LANGUAGE) は次のように確認できます。
SELECT @@LANGUAGE;
[実行結果]
私の環境では、us_english なので、第三引数に 'ja-JP' を指定する必要があります。
DATENAME 関数を使って日本語の曜日を取得する
DATENAME 関数を使っても、日付から日本語の曜日を取得することができます。
DATENAME 関数の基本構文は以下の通りです。
DATENAME ( datepart , date )
datepart には、date のどの部分の名前を取得するのかを指定します。
曜日を指定するには、weekday か省略形の dw、w が指定できます。
date には、名前を取得したい対象の日時の値を指定します。日付系のデータ型が指定できます。
ただ、この weekday がどのような言語で返ってくるかは、現在の言語設定によります。
私の環境は先ほど確認したように、言語設定が us_english になっています。
日本語の曜日を取得したい場合は、言語設定を日本語に変更する必要があります。
言語の設定を日本語に変更するには次のようにできます。
SET LANGUAGE Japanese; SELECT @@LANGUAGE;
[実行結果]
この変更は、現在のセッション内でのみ有効になります。
DATENAME 関数を使って、日付から日本語の曜日「月・火・水・木・金・土・日」を取得するには次のようにできます。
SET LANGUAGE Japanese; DECLARE @Date1 DATE = '2025-07-25'; SELECT DATENAME(WEEKDAY, @Date1) AS DayOfWeek_JP1, LEFT(DATENAME(WEEKDAY, @Date1), 1) AS DayOfWeek_JP2;
[実行結果]
DATENAME 関数の第一引数に WEEKDAY を渡すと「金曜日」のように曜日が返ってきます。
「金」のように省略形が欲しい場合は、LEFT 関数を使って、最初の 1 文字を使うことで取得できます。
もともと言語設定が日本語の人は、最初の行の SET LANGUAGE Japanese; はいりませんのでご注意ください。
同じセッション内で、通貨や日付などを元のカルチャーでフォーマットしたい時などは、すぐに言語設定を戻してくださいね。
DATEPART 関数を使って日本語の曜日を取得する
DATEPART 関数と CASE 式を使って、日付から日本語の曜日に変換する方法をご紹介します。
DATEPART 関数の基本構文は以下の通りです。
DATEPART ( datepart , date )
datepart には、date のどの日付部分を取得するのかを指定します。
曜日を指定するには、weekday か省略形の dw が指定できます。
date には、日付部分を取得したい対象の日時の値を指定します。日付系のデータ型が指定できます。
戻り値は date で指定された日付の、datepart で指定された日付部分を表す整数になります。
DATEPART 関数の第一引数に weekday を指定した場合、曜日に応じて 1 ~ 7 までの整数が返ってきますが、どの数字がどの曜日に対応しているかは、DATEFIRST の設定によって変わります。
例えば、DATEFIRST が 7 の時は、日付が日曜日だと 1 を返しますが、DATEFIRST が 1 の時は、日付が日曜日だと 7 を返します。
現在の DATEFIRST の値は次のように確認できます。
SELECT @@DATEFIRST;
[実行結果]
DATEFIRST は 7 が default で、日本語環境でも 7 になっているはずです。
言語設定が確かではない環境にデプロイする予定があるのであれば、次のようにセッション内の DATEFIRST を指定しておくと、weekday の戻り値が安心して使えます。
SET DATEFIRST 7;
これをふまえて、DATEPART 関数を使って、日付から日本語の曜日「月・火・水・木・金・土・日」を取得するには次のようにできます。
--SET DATEFIRST 7; DECLARE @Date1 DATE = '2025-07-25'; SELECT CASE DATEPART(WEEKDAY, @Date1) WHEN 1 THEN N'日' WHEN 2 THEN N'月' WHEN 3 THEN N'火' WHEN 4 THEN N'水' WHEN 5 THEN N'木' WHEN 6 THEN N'金' WHEN 7 THEN N'土' END AS DayOfWeek_JP;
[実行結果]
DATEPART 関数の第一引数に WEEKDAY を指定し、第二引数に '2025-07-25' を渡すと、金曜日なので、DATEFIRST が 7 の環境では 6 が返ってきます。
CASE 式を使って、返ってくる整数によって、それぞれの曜日を取得できるようにしています。
ご参考までに、 DATEFIRST を 1 に変更してから、同じスクリプトを実行すると間違った曜日が返っているのがわかります。
その場合は、DATEFIRST に応じて CASE 式の WHEN の数字を変更するか、最初に SET DATEFIRST 7; を実行してください。
いろいろ書きましたが、SQL Server 2012 以降であれば、FORMAT 関数がおすすめです。
以上、日付から日本語の曜日「月・火・水・木・金・土・日」を取得する方法をご紹介しました。