SQL Server 文字列を日付型に変換する: CONVERT, CAST
SQL Serverで文字列を日付型に変換するには CONVERT, CAST を使います。
逆に日付型から文字列にする場合にも CONVERT を使います。
SQL Server 日付の年月日だけを取り出す: CONVERT
CONVERT や CAST は、あるデータ型の式を別のデータ型の式に変換できる非常に便利な関数です。
CAST
CASTを使った変換です。
select 'CAST(''02/27/2018'' AS datetime)' as 式, CAST('02/27/2018' AS datetime) as 結果 union all select 'CAST(''180227'' AS datetime)', CAST('180227' AS datetime) union all select 'CAST(''18/02/27'' AS datetime)', CAST('18/02/27' AS datetime) union all select 'CAST(''18/02/27 07:08:09'' AS datetime)', CAST('18/02/27 07:08:09' AS datetime) union all select 'CAST(''20180227'' AS datetime)', CAST('20180227' AS datetime) union all select 'CAST(''2018/02/27'' AS datetime)', CAST('2018/02/27' AS datetime) union all select 'CAST(''2018/02/27 07:08:09'' AS datetime)', CAST('2018/02/27 07:08:09' AS datetime)
結果は、以下の通りです。
CONVERT
CONVERTを使った変換です。(CASTと変わりませんが。。。)
select 'CONVERT(datetime, ''02/27/2018'')' as 式, CONVERT(datetime, '02/27/2018') as 結果 union all select 'CONVERT(datetime, ''180227'')', CONVERT(datetime, '180227') union all select 'CONVERT(datetime, ''18/02/27'')', CONVERT(datetime, '18/02/27') union all select 'CONVERT(datetime, ''18/02/27 07:08:09'')', CONVERT(datetime, '18/02/27 07:08:09') union all select 'CONVERT(datetime, ''20180227'')', CONVERT(datetime, '20180227') union all select 'CONVERT(datetime, ''2018/02/27'')', CONVERT(datetime, '2018/02/27') union all select 'CONVERT(datetime, ''2018/02/27 07:08:09'')', CONVERT(datetime, '2018/02/27 07:08:09')
結果は、以下の通りです。
引数の文字列表記
CONVERT も CAST も、引数にいろいろな形式で文字列を与えることができます。
これは使用する言語によってエラーになってしまう場合もあります。
使っているSql Server の設定言語に合わせて引数の文字列を渡すか、SET DATEFORMAT を使ってそのセッションの日付フォーマットを変えるかすると安心です。
基本的に日本のサーバーであれば日本語が使用言語になっていると思いますが、私は格安のアメリカのレンタルサーバーを使うこともあるため、SET DATEFORMAT を使っています。
日本は「年月日」で表記しますが
日本は「年月日」で表記しますが、アメリカは「月日年」、ヨーロッパは「日月年」となります。
セッションの言語によって、datetime の形式とシステム メッセージが決められているので、注意しましょう。
以上、「SQL Server 文字列を日付型に変換する: CONVERT, CAST」の備忘録でした。