[SQL Server] 文字列から日付型へ変換

SQL Serverでの型変換はCAST関数、またはCONVERT関数を使用します。

 
CAST関数

CAST (expression AS data_type [(length)])

 
CONVERT関数

CONVERT (data_type[(length)], expression [, style])

 
引数

expression:
 変換したい値。
 変換先の型とサイズを超えないように指定することが必要です。
 DATETIME型は 1753年1月1日~9999年12月31日 の範囲の情報を設定できる点に注意。

data_type:
 変換したいデータ型。別名データ型は使用不可。

length:
 対象のデータ型の長さ。(整数値指定。省略可能。既定値は30)

style:
 CONVERT関数の変換方法。(整数値指定。)

 
基本的に、日付型以外への変換。 例えば、数値⇔文字列などの変換は苦もなくどちらの関数を使用してもできるでしょう。 ただし、文字列型から日付型への変換は色々と苦しむところ…

そこが他のデータベースや開発言語とは大きく違い、一番困る部分だと思います。

 
styleの指定方法:

style 結果
2桁の年 4桁の年
日本で一般的な形式 11 111 11: yy/mm/dd
111: yyyy/mm/dd
規定値 0
100
mon dd yyy hh:miAM
mon dd yyy hh:miPM
1 101 1: mm/dd/yy
101: mm/dd/yyyy
ANSI 2 102 2: yy.mm.dd
102: yyyy.mm.dd
3 103 3: dd/mm/yy
103: dd/mm/yyyy
4 104 4: dd.mm.yy
104: dd.mm.yyyy
5 105 5: dd-mm-yy
105: dd-mm-yyyy
6 106 6: dd mon yy
106: dd mon yyyy
7 107 7: Mon dd, yy
107: Mon dd, yyyy
時間のみ 8
108
hh:mi:ss
9
109
mon dd yyyy hh:mi:ss:mmmAM
(または PM)
10 110 10: mm-dd-yy
110: mm-dd-yyyy
ISO 12 112 12: yymmdd
112: yyyymmdd
13
113
dd mon yyyy hh:mi:ss:mmm
(24h)
時間のみ 14 114 hh:mi:ss:mmm
(24h)
ODBC 標準 20
120
yyyy-mm-dd hh:mi:ss
(24h)
ODBC 標準
(ミリ秒)
21
121
yyyy-mm-dd hh:mi:ss.mmm
(24h)
126 yyyy-mm-ddThh:mi:ss.mmm
(mmmが0のとき出力されない)
127 yyyy-mm-ddThh:mi:ss.mmmZ
(mmmが0のとき出力されない)
(Zはタイムゾーン)
イスラム暦 130 dd mon yyyy hh:mi:ss:mmmAM
(monはイスラム暦の月)
(表示できる文字コードセットかNVARCHARを使用しないと表示されない)
イスラム暦 131 dd/mm/yyyy hh:mi:ss:mmmAM
(yyyyはイスラム暦の年?)

 
Example:

-- 11  3 2013  8:30AM
SELECT CONVERT(VARCHAR(30),  GETDATE())

-- 2013-11-03 08:32:03
SELECT CONVERT(VARCHAR(30),  GETDATE(),              20)

-- 2013-11-03 08:33:09
SELECT CONVERT(VARCHAR(30),  GETDATE(),             120)

-- 2013/11/03
SELECT CONVERT(VARCHAR(30),  GETDATE(),             111)

-- 08:35:25
SELECT CONVERT(VARCHAR(30),  GETDATE(),             108)

-- 2013-01-02 15:04:05.000 の日付型
SELECT CONVERT(DateTime,     '01 02 2013 03:04:05PM')
SELECT CONVERT(DateTime,     '2013-01-02 15:04:05', 120)

-- 1900-01-01 15:04:05.000 の日付型
SELECT CONVERT(DateTime,     '15:04:05', 8)