T-SQL 日付をフォーマットされた文字列に変換する
日付をフォーマットされた文字列に変換する
日付型のデータを SQL Server 側でフォーマットされた文字列に変換したい時ありますよね。
その度に、フォーマットする為の Date and Time の style、何番だったかな?と思ってしまうので、ここに私が良く使う、日付をフォーマットされた文字列に変換する方法を書いておこうと思います。
CONVERT を使って日付をフォーマットして文字列に変換する
一番良く使うのが CONVERT を使って、日付を文字列に変換する方法です。
シンタックスは CONVERT ( data_type [ ( length ) ] , expression, style) で、 expression に変換したい日付が、 style には番号が入ります。
私がよく使う、CONVERT を使った日付を文字列に変換するクエリーは以下の通りです。
SELECT CONVERT(NVARCHAR, @Date, 101) AS '101',-- mm/dd/yyyy
CONVERT(NVARCHAR, @Date, 1) AS '1',-- mm/dd/yy
CONVERT(NVARCHAR, @Date, 111) AS '111',-- yyyy/mm/dd
CONVERT(NVARCHAR, @Date, 11) AS '11',-- yy/mm/dd
CONVERT(NVARCHAR, @Date, 103) AS '103',-- dd/mm/yyyy
CONVERT(NVARCHAR, @Date, 3) AS '3'; -- dd/mm/yy
SELECT CONVERT(NVARCHAR, @Date, 112) AS '112',-- yyyymmdd
CONVERT(NVARCHAR, @Date, 12) AS '12',-- yymmdd
CONVERT(NVARCHAR, @Date, 108) AS '108',-- HH:mi:ss
CONVERT(NVARCHAR, @Date, 114) AS '114';-- HH:mi:ss:mmm
ちょっと話はそれますが、現在のところ、SQL Server のカットオフ年のデフォルトは 2049 年です。 ですので、年を 2 桁で扱う時、1/1/49 といえば 2049 年 1 月 1 日、 そして、1/1/50 は 1950 年 1 月 1 日とみなされてしまいます。
日付を文字列に変換して表示する際には、問題にならないかもしれませんが、年はシステム全体で、できるだけ 4 桁で扱うようにしておいたほうが良いと思います。
FORMAT を使って日付をフォーマットして文字列に変換する
『 SQL Server 2012 から 』 は、FORMAT 関数を使って日付を変換することもできます。
まずは、FORMAT 関数でカルチャーを指定して文字列に変換する方法です。
SELECT FORMAT(@Date, 'd', 'ja-JP' ) AS 'Japanese (Japan)',
FORMAT(@Date, 'd', 'en-US' ) AS 'English (US)';
そして、最後になりましたが、FORMAT 関数ではカスタムの書式指定文字列を指定して、日付や時刻をカスタムフォーマットすることも可能です。 とっても便利ですね!
SELECT FORMAT(@Date, 'yyyyMMddHHmmss') AS 'Custom';
※ 指定できる書式指定文字列はマイクロソフトの「 MSDN ライブラリ - カスタムの日付と時刻の書式指定文字列 」のページで確認してください。