T-SQL 日付をフォーマットされた文字列に変換する

日付をフォーマットされた文字列に変換する

日付型のデータを SQL Server 側でフォーマットされた文字列に変換したい時ありますよね。

その度に、フォーマットする為の Date and Time の style、何番だったかな?と思ってしまうので、ここに私が良く使う、日付をフォーマットされた文字列に変換する方法を書いておこうと思います。

CONVERT を使って日付をフォーマットして文字列に変換する

一番良く使うのが CONVERT を使って、日付を文字列に変換する方法です。

シンタックスは CONVERT ( data_type [ ( length ) ] , expression, style) で、 expression に変換したい日付が、 style には番号が入ります。

私がよく使う、CONVERT を使った日付を文字列に変換するクエリーは以下の通りです。

DECLARE @Date DATETIME = GETDATE();

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

CONVERT を使った日付を文字列に変換するクエリー


ちょっと話はそれますが、現在のところ、SQL Server のカットオフ年のデフォルトは 2049 年です。 ですので、年を 2 桁で扱う時、1/1/49 といえば 2049 年 1 月 1 日、 そして、1/1/50 は 1950 年 1 月 1 日とみなされてしまいます。

日付を文字列に変換して表示する際には、問題にならないかもしれませんが、年はシステム全体で、できるだけ 4 桁で扱うようにしておいたほうが良いと思います。

二桁の年の例

FORMAT を使って日付をフォーマットして文字列に変換する

『 SQL Server 2012 から 』 は、FORMAT 関数を使って日付を変換することもできます。

まずは、FORMAT 関数でカルチャーを指定して文字列に変換する方法です。

DECLARE @Date DATETIME = GETDATE();

SELECT   FORMAT(@Date, 'd', 'ja-JP' ) AS 'Japanese (Japan)',
         FORMAT(@Date, 'd', 'en-US' ) AS 'English (US)';

FORMAT を使った日付を文字列に変換するクエリー1


そして、最後になりましたが、FORMAT 関数ではカスタムの書式指定文字列を指定して、日付や時刻をカスタムフォーマットすることも可能です。 とっても便利ですね!

DECLARE @Date DATETIME = GETDATE();
SELECT FORMAT(@Date, 'yyyyMMddHHmmss') AS 'Custom';

FORMAT を使った日付を文字列に変換するクエリー2

※ 指定できる書式指定文字列はマイクロソフトの「 MSDN ライブラリ - カスタムの日付と時刻の書式指定文字列 」のページで確認してください。


© 2010-2024 SQL Server 入門