.NET開発者のためのブログメディア
SQL Serverの日付データ取得の関数6つ|文字列や数値で取得する方法も説明
- SE
- SQL Serverの日付データ取得について教えてください。
- PM
- SQL Serverの日付型3種類と関数などを紹介します。
目次
SQL Serverの日付型3種類
SQL Serverでは、日付型のデータ型が数種類用意されていますが、ここではよく使う3つの種類を確認していきます
1:DATE型
日付を格納するのに使用するデータ型です。形式は「YYYY-MM-DD」です。ハイフン(-)で区切られている箇所は、スラッシュ(/)やピリオド(.)で区切ることも可能です。
DATE型の最小単位は日であるため、時間まで不要な場合に使用する型となります。
表示例①:2020-08-27
表示例②:2020/08/27
表示例③:2020.08.27
2:DATETIME型
日付・時刻を格納するのに使用するデータ型です。形式は「YYYY-MM-DD hh:mm:dd[.mmm]」です。最小単位は3.33msとなります。
表示例①:2020-08-27 11:12:13
表示例②:2020/08/27 11:12:13.487
3:DATETIME2型
日付・時刻を格納するのに使用するデータ型です。形式は「YYYY-MM-DD hh:mm:dd[.nnnnnnn]」です。最小単位は100nsとなります。
表示例①:2020-08-27 11:12:13
表示例②:2020/08/27 11:12:13.0000001
SQL Serverの日付データ取得の関数6つ
以上SQL SERVERの日付型であるDATE、DATETIME、DATETIME2型について紹介しました。次に、これらの日付型を取得する関数について6つほど紹介していきます。
1:同じ日付のデータを取得する
まずは、数字による日付からSQL Serverの日付データ型を取得するケースについて紹介していきます。厳密にミリ秒まで取得する場合と年月日までの日付データ型を取得する2つのケースについて説明します。
完全に同じデータのみ取得する方法
指定した日付の日付データ型を得たい場合はDATETIME2FROMPARTS関数を使って得ることができます。
構文は以下の通りです。年月日に加えて、秒、ミリ秒、有効桁数を指定して使います。
1
|
DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision )
|
具体例は以下の通りです。以下のように有効桁数を指定することでdatetime2型の秒の桁数を指定することができます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SELECT DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 5, 1 );
SELECT DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 50, 2 );
SELECT DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 500, 3 );
GO
----------------------
2011-08-15 14:23:44.5
(1 row(s) affected)
----------------------
2011-08-15 14:23:44.50
(1 row(s) affected)
----------------------
2011-08-15 14:23:44.500
(1 row(s) affected)
|
日付が一致するデータを取得する方法
先ほどは厳密な日付データを得る方法について説明しました。ミリ秒などを含まない年月日のみの日付型を得たい場合はDATEFROMPARTS関数を使って得ることができます。
構文は以下の通りです。
1
|
DATEFROMPARTS ( year, month, day )
|
具体例は以下の通りです。
1
2
3
4
5
6
7
|
SELECT DATEFROMPARTS ( 2010, 12, 31 ) AS Result;
Result
----------------------------------
2010-12-31
(1 row(s) affected)
|
2:指定した日付より前のデータを取得する
指定日時の日付型データを得る方法を説明しました。もっとも、指定した日付だけではなく、その前後のデータを得たいケースがあります。これから指定した日付よりも前のデータを取得する方法を説明します。
DATEADD関数を使うことで前後の日付を得ることができます。
datepartはdayやmonthなどを指定します。numberは操作したい数を入力します。dateには操作の基準となる日付を入力します。
1
|
DATEADD (datepart , number , date )
|
以下の例では2006年8月30日のmonthに対して、-1操作するという意味になります。結果は1か月前の2006年7月30日が得られます。
1
2
3
|
SELECT DATEADD(month, -1, '20060830');
20060730
|
DATEADD関数は指定した日付に対して加算減算ができる関数になります。この関数を使って指定した日付より前のデータを取得できます。
3:指定した日付より後のデータを取得する
続いて指定した日付よりも後のデータを取得する方法を説明します。
後のデータを得たい場合についても同様にDATEADD関数を使うことで得ることができます。numberに正の値を指定することで後のデータを得ることができます
1
|
DATEADD (datepart , number , date )
|
以下の例では2006年8月30日のdayに対して、1操作するという意味になります。結果は1日後の2006年8月30日が得られます。
1
2
3
|
SELECT DATEADD(day, 1, '20060829');
20060730
|
4:特定の期間のデータを取得する
現在時刻のデータを取得したい場合はGETDATE()関数を使って得ることができます。ここで得られる日付はSQL Serverが稼働しているシステムの日時に依存します。
1
|
GETDATE()
|
5:指定の期間外のデータを取得する
与えた日付以外の日付型を得たい場合は、DATEADD、EOMONTH、SWITCHOFFSET、TODATETIMEOFFSETの4種類の関数を使って得ることができます。
これらの関数は指定した日付の前後の日付データを得たり、異なるタイムゾーンの日付データを得るための関数になります。
6:指定した日付の末日のデータを取得する
指定した日付の月の末日を取得したい場合はEOMONTH関数を使って得ることができます。構文は以下の通りです。
EOMONTH ( start_date [, month_to_add ] )
以下の例ではEMONTHに与えた2011年12月1日の末日を取得することができます。
1
2
3
|
DECLARE @date DATETIME = '12/1/2011';
SELECT EOMONTH ( @date ) AS Result;
GO
|
第二引数が与えられていない場合は、指定した日の月末である31日という結果が得られます。
1
2
3
|
Result
------------
2011-12-31
|
(1 row(s) affected)
仮に-1が与えられていた場合はその前の月の結果が得られます。
1
2
3
|
Result
------------
2011-11-30
|
(1 row(s) affected)
SQL Serverで日付や時刻の一部を取得する方法3つ
SQL Serverでは日付データから年月日それぞれを抽出する関数が用意されています。3つの関数について解説します。
SQLを使ったレコード操作の際に、これらの関数を駆使することで特定の日付ではなく特定の年や月などに範囲を広げることができます。
1:年のデータ
YEAR関数を使うことで日付から年のデータだけを抽出することができます。構文は以下の通りです。
1
|
YEAR( date );
|
具体例は以下の通りです。カッコ内に日付データから年だけを抽出することができます。
1
2
3
4
5
6
7
8
|
SELECT YEAR('2010-04-30T01:01:01.1234567-07:00');
SELECT YEAR('2010-04-30');
+--------------------+
| YEAR('2010-04-30') |
+--------------------+
| 2010 |
+--------------------+
|
2:月のデータ
年のデータを抽出するのと同様、MONTH関数を使うことで日付から月のデータだけを抽出することができます。構文は以下の通りです。
1
|
MONTH( date );
|
具体例は以下の通りです。カッコ内の日付データから月だけを抽出することができます。
1
2
3
4
5
6
7
8
|
SELECT MONTH('2010-04-30T01:01:01.1234567-07:00');
SELECT MONTH('2010-04-30');
+--------------------+
| MONTH('2010-04-30') |
+--------------------+
| 4 |
+--------------------+
|
3:日のデータ
今までの例と同様、DAY関数を使うことで日付から日のデータだけを抽出することができます。構文は以下の通りです。
1
|
DAY( date );
|
具体例は以下の通りです。カッコ内の日付データから日だけを抽出することができます。
1
2
3
4
5
6
7
8
|
SELECT DAY('2010-04-30T01:01:01.1234567-07:00');
SELECT DAY('2010-04-30');
+--------------------+
| DAY('2010-04-30') |
+--------------------+
| 30 |
+--------------------+
|
SQL Serverで指定の要素を文字列で取得する方法
今までは指定した日付の日付型を得る方法について説明しました。つまり、DATE、DATETIME、DATETIME2型のいずれかが得られる関数を紹介しました。
そこで、日付型ではなく文字列や整数として得たい場合について紹介します。
まずは文字列として取得する方法について説明いたします。構文は以下の通りです。
1
|
DATENAME ( datepart , date )
|
指定したdatepartについての文字列nvachar型を得ることができます。datepartにはyearだけではなくmonthやdayなどを指定することができます。
1
2
3
|
SELECT DATENAME(year,'2007-10-30 12:15:32.1234567 +05:10');
2007
|
SQL Serverで指定の要素を数値で取得する方法
続いて数値として取得する方法について説明します。構文は以下の通りです。
1
|
DATEPART ( datepart , date )
|
指定したdatepartについての数値int型を得ることができます。datepartにはyearだけではなくmonthやdayなどを指定することができます。
1
2
3
|
SELECT DATEPART(year,'2007-10-30 12:15:32.1234567 +05:10');
2007
|
- SE
- SQL Serverの日付データ取得方法がわかりました。
- PM
- 紹介した方法を参考に実践してみましょう。
SQL Serverで日付データを取得できるようになろう
この記事では、SQL Serverの日付データ型と日付型を得るための関数を紹介しました。日付型にはDATE、DATETIME、DATETIME2型の3種類があります。また、それらの日付型を得るための代表的な関数を6つほど紹介しました。
併せて日付から特定のデータを抽出する方法や、日付を整数や文字列として得る方法についても説明しました。
日付データを扱えるようになるメリットとしては、データベースから特定期間のレコードを取得したいケースなどに活用することができます。この機会に使い方をマスターして、開発現場で活用していきましょう。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)