Microsoft SQL Server のデータタイムに対して Cast
と Convert
のどちらを選ぶべきか。
MSDN仕様書]1を見てみました。一見したところ、構文以外の違いはないように思えます:
CAST:の構文。
CAST ( expression AS data_type [ ( length ) ] )
CONVERT:のシンタックス
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
また、CASTはANSI標準であるため、異なるデータベース・プラットフォーム間での移植性が高くなっています。
convertにはオプションで
styleというパラメータがある。これは混乱を避けるのに役立つ。 例えば、
cast('20130302' as date)`と書くと、どうなるでしょうか?3月2日か2月3日か?
また、日付を文字列にキャストする際に特定の書式が必要な場合は、 convert
を使用する必要があります。
あなたが投稿したMSDN仕様書のリンクを注意深く読めば、セクションGの下にあなたの答えが見つかるでしょう:
G. Using CAST and CONVERT with datetime data
***次の例は、現在の日付と時刻を表示し、CASTを使用して現在の日付と時刻を文字データ型に変更し、CONVERTを使用してISO 8901形式で日付と時刻を表示します。
SELECT
GETDATE() AS UnconvertedDateTime,
CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
これが結果セットです。
UnconvertedDateTime UsingCast UsingConvertTo_ISO8601
----------------------- ------------------------------ ------------------------------
2006-04-18 09:58:04.570 Apr 18 2006 9:58AM 2006-04-18T09:58:04.570
(1 row(s) affected)
違いがはっきりわかります。