[SQL Server] 日付の曜日を取得方法 (datepart, datename)

inno
2014-08-02 17:19 10984 0
MS-SQL / SQL Server
日付の曜日を取得方法

日付の曜日を取得方法はいろいろあると思いますが、
今回はdatepart, datenameを利用して取得する方法について説明したいと思います。

1)datepartで日付の曜日を取得方法

使い方
SELECT DATEPART(DW, 日付)

「日付」のところに日付を下記のように入れると1~7の数字が返されます。

例文
SELECT DATEPART(DW, '2014-05-13')

実行結果



例文で記述した「'2014-05-13'」は火曜日です。
つまり、戻り値は下記のようになります。

 戻り値

 説明

 1

日曜日

 2

月曜日 

 3

火曜日 

 4

水曜日 

 5

 木曜日

 6

金曜日 

 7

 土曜日


では、曜日の戻り値を文字列で変換する方法について説明します。
簡単に言いますと「CASE WHEN」を使います。

SELECT CASE DATEPART(DW, '2014-05-13') 
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'土' 
ELSE N'' END


実行結果


それでは、テーブルに保存されている日付カラムから直接曜日を取得する時はどうすればいいの?
下記のSQLを実行して日付カラムから直接曜日を取得してみてください。

--テストテーブル作成
CREATE TABLE dbo.TempData
(
Idx int
, RegDate datetime
)

--テストデータ登録
DECLARE @i int
SET @i = 0

WHILE (@i < 20)
BEGIN

INSERT INTO dbo.TempData (Idx, RegDate)
VALUES (@i, DATEADD(dd, @i, '2014-01-01'))
SET @i = @i + 1
END

--データ確認
SELECT * FROM dbo.TempData


実行結果



「dbo.TempData」テーブルには20件のデータが登録されました。
ここに上記の「CASE WHEN」を使って曜日も一緒に表示することができます。


--曜日をつけて表示
SELECT * 
,CASE DATEPART(DW, RegDate) 
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'土' 
ELSE N'' END AS [曜日]
FROM dbo.TempData

実行結果


2)DATENAMEで日付の曜日を取得方法

使い方
SELECT DATENAME(DW, 日付)

「日付」のところに日付を下記のように入れると「日曜日」~「土曜日」までの曜日を文字で返されます。

例文
SELECT DATENAME(DW, '2014-05-13')

実行結果


「火曜日」と結果がでましたね。
「dbo.TempData」テーブルにDATENAME使って曜日も一緒に表示することもできます。 

--曜日をつけて表示
SELECT *
,DATENAME(DW, RegDate) AS [曜日]
FROM dbo.TempData

実行結果


これがDATEPARTを使うより簡単だし便利だと思うかも知れませんが、
いろいろ短所もあります。
DATENAMEはSQL Serverの言語によって変わります。
つまりSQL Serverが英語バージョンの場合、「火曜日」ではなく「Tuesday」と英語で結果が出ます。
日本語バージョンだとしても「O曜日」と固定された文字しか表現できないので、
「(火),(Tue)」などこんな感じで文字フォーマットを変えて表示したい場合は、datepartとcase whenを使うことをおすすめします。

コメント