Webサイト制作コースのお申し込みはこちら

データベースで日付を扱っていないデータベースはないといっても良いほど重要な要素です。

SQLを学習している方もまずはこういった”絶対不可欠な要素”から学習していくべきだと思いますので、この記事では日付に関する記事を書きたいと思います。

中でも今回は「曜日」の算出に使われる関数について具体的なコードも踏まえて解説していきますので、現在学習中の方は必見です!

曜日にまつわる関数について

曜日の取得には「DATEPART関数」と「DATENAME関数」という二つの方法がありますが、それぞれ関数が違います。

どちらが使いやすいかというモノではなく、ケースによってこれら二つの関数のどちらを使用するか選択することになるため、両方覚えておきましょう。

DATEPART関数

まず一つ目は「DATEPART」を使って取得する方法です。

まず解説の前にDATEPART関数の記述について見ていきましょう。

DATEPART関数は次のように記述します。

DATEPART ( [datepart] , [date] )

第一引数の「datepart」の戻り値は、この関数(DATEPART)によって整数が返されるdate(第二引数)の特定部分となります。

※なお今回の記事では「weekday」を使用して解説を進めていきますが、”datepart”引数は次の中から指定することが出来ます。

datepart 省略形
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns
tzoffset tz
iso_week isowk, isoww

逆に言うとこれ以外はリファレンスにも「DATEPART は、datepart引数に関して、ユーザー定義変数に相当するものは受け入れられません。」としっかり明記されていますので、指定することが出来ません。

第二引数の「date」には、データ型の中でも時間に関係したものを入れることが出来ます。

具体的には次を見てください。

ただしdatepartとは違い、この第二引数のdateには、列式、式、文字列リテラル、ユーザー定義の変数を指定することも出来ます。

記述方法に関しての説明は以上です。

それでは次に具体的な取得方法について解説していきます。

まず次のサンプルコードをご覧ください。

SELECT DATEPART(weekday, '2020-07-27')
GO
-----------
          2

今回の記事は曜日についての解説を行っているため、サンプルコードでは第一引数に「weekday」を使用しています。

個のクエリを実行すると、「2」という数字が返ってきます。

理由としては、DATPART関数は戻り値の型が”int”の関数となっているためです。

そしてこの戻り値は”SET DATEFIRST”で設定された値となります。

今回は”SET DATEFIRST”の説明は省略しますが、デフォルトでは”日曜日”が週初めに設定されています。

2020年7月27日は「月曜日」に該当する日付なので、結果として2が返ってきたというわけです。

またこのDATEPART関数の第一引数は先ほどの表にも記載した通り、省略形で記述することも出来ます。

省略形での記述は次の通りです。

SELECT DATEPART(dw, '2020-07-27')
GO
-----------
          2

当然ですが、結果は同じものが返ってくることが確認できます。

DATENAME関数

二つ目はDATENAMEを使って取得する方法です。

こちらもまずは記述方法から見ていきましょう。

DATENAME ( [datepart] , [date] )

このDATENAME関数はDATEPART関数とは対照的に、指定されたdateの指定されたdatepartの戻り値を”文字列”で返します。

なおこのDATENAME関数の第一引数、第二引数についての詳細は先ほど解説したDATEPART関数の第一引数及び第二引数の説明に同じです。

ではこちらも実際にコードで確認してみましょう。

次のサンプルコードを見てください。

SELECT DATEPART(weekday, '2020-07-27')
GO
-----------
月曜日

先ほどDATEPART関数で使ったコードと同じものですが、今度は曜日が直接返ってきていることが確認できます。

規定値について

DATEPART関数及びDATENAME関数どちらにも同一の注意すべき点がありますので簡単に解説していきます。

第二引数のに存在しない第一引数を指定した場合は、第二引数にリテラルが含まれる場合にのみ、第一引数で指定したdatepartの規定値を返します。

ポテパンダの一言メモ

リテラルとは、変数や定数以外の数値や文字列の事です。

“Hello world”や12345、2020-07-27などこれらは全てリテラルとなります。

なお日付に関する規定値は「1900-01-01」となっていますので、これを基準にした戻り値が返ってきます。

実際に次のコードを見ていただくとご理解いただけると思います。

SELECT
	DATENAME(year, '12:10:30.123') AS "year",
	DATENAME(month, '12:10:30.123') AS "month",
	DATENAME(day, '12:10:30.123') AS "day",
	DATENAME(dayofyear, '12:10:30.123') AS "dayofyear",
	DATENAME(weekday, '12:10:30.123') AS "weekday";
GO

year      month     day       dayofyear weekday
--------- --------- --------- --------- ---------
1900             01         1         1 月曜日

このサンプルコードでは、第一引数で第二引数のリテラルに存在しないdatepartを指定しています。

結果、日付の規定値である「1900-01-01」を基に計算された値が返ってきていることが確認できます。

曜日の表記を自由に変更する

ここまでは曜日に関する二つの関数についての解説を行ってきましたが、ここからは小技的なコードの紹介をしたいと思います。

DATENAME関数を使うと”月曜日”のような形式で表記されますが、これはSQL Serverの言語によって変わってきます。

とはいってもそう簡単にコロコロ変更するようなものでもない為、表記を変更したい場合には「CASE式」を使って次のように記述することで解決できます。

SELECT 
	CASE DATEPART(weekday, GETDATE()) 
		WHEN 1 THEN 'Sun' 
		WHEN 2 THEN 'Mon' 
		WHEN 3 THEN 'Tue' 
		WHEN 4 THEN 'Wed' 
		WHEN 5 THEN 'Thu' 
		WHEN 6 THEN 'Fri' 
		WHEN 7 THEN 'Sat' 
	END
GO
-----------
Mon

まとめ

いかがでしたか?

今回の記事ではSQLの日付の中でも「曜日」に焦点を当てて解説してみました。

日付を扱うケースは非常に沢山出てくるため、必ずマスターしておくようにしましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。