datetime キャストか変換か?

Microsoft SQL Server のデータタイムに対して CastConvert のどちらを選ぶべきか。


MSDN仕様書]1を見てみました。一見したところ、構文以外の違いはないように思えます:

CAST:の構文。

CAST ( expression AS data_type [ ( length ) ] )

CONVERT:のシンタックス

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

また、CASTはANSI標準であるため、異なるデータベース・プラットフォーム間での移植性が高くなっています。

質問へのコメント (7)
ソリューション

convertにはオプションでstyleというパラメータがある。これは混乱を避けるのに役立つ。 例えば、cast('20130302' as date)`と書くと、どうなるでしょうか?3月2日か2月3日か?

また、日付を文字列にキャストする際に特定の書式が必要な場合は、 convert を使用する必要があります。

解説 (6)

あなたが投稿した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)

違いがはっきりわかります。

更新

**http://blog.sqlauthority.com/2012/11/21/sql-server-display-datetime-in-specific-format-sql-in-sixty-seconds-033-video/

解説 (2)