アクセスログ見ていると、
http://10395.diarynote.jp/200408300855070000/
がトラップになって
「sql castとconvertの違い」

での検索のアクセスがあった。

次のコードで実験。

CREATE TABLE test2 (
a date
CONSTRAINT DF_test2__a DEFAULT CAST(’10-1-10’ as date)
, b float
CONSTRAINT DF_test2__b DEFAULT CAST(2 as float)
)
SELECT
C.name
, D.definition as default_constraint
FROM
sys.default_constraints D
INNER JOIN sys.columns C
ON D.object_id=C.default_object_id
WHERE C.object_id = object_id(’test2’)

(コピーする場合は下記から。
http://kazamai7610.wordpress.com/2011/10/27/cast-%e3%81%a8-convert-%e3%81%ae%e6%a4%9c%e8%a8%bc/
)

結果

name | default_constraint
a  |  (CONVERT([date],’10-1-10’,0))
b  | (CONVERT([float],(2),0))

つまり、Dafault制約で Cast を使ったにもかかわらず、
その制約を確認すると Convert に書き換わっているわけです。
このことは SQL Server Management Studio (SSMS) からも確認できます。
というわけで、内部的には Cast は Convert に置き換えられるようです。

したがって、

Cast と Convert は気にするような違いは無い

というのが僕の意見です。
 ・・・もちろん、引数の数からして違うので convert の方が多彩な動きがあるのですが。
(
Convert の引数による動作の違いは
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx
を参照。)

---
2013年4月12日追記
所謂「糖衣構文(Syntactic sugar)」ってやつですね。
http://ja.wikipedia.org/wiki/%E7%B3%96%E8%A1%A3%E6%A7%8B%E6%96%87
リファレンスマニュアルで同一項目に書いてあるのも同じものだからでしょう。
---
2013年12月20日追記
歴史的経緯を補足するならば、もともとは convert だけだったが
ANSI SQL に準拠するためにあとから cast が追加されたってことです。

---
2015年2月8日追記
速さを気にしての検索を見受けられるが、Where句でキャスト(型変換の意。暗黙、明示的な Cast,Convertの利用すべて)するとインデックスとかが利かなくなるのでそもそもキャスト自体を避けるべき。
日時絡みなら
http://10395.diarynote.jp/201008270101429723
の余談が参考になるかも。

コメント