web-dev-qa-db-ja.com

T-SQLキャストと変換

CASTCONVERTを使用する場合の一般的なガイダンスは何ですか?どちらか一方を選択することに関連するパフォーマンスの問題はありますか? 1つはANSI-SQLに近いですか?

305
BuddyJoe

CONVERTはSQL Server固有で、CASTはANSIです。

CONVERTは、日付などをフォーマットできるという点でより柔軟性があります。それ以外はほぼ同じです。拡張機能を気にしない場合は、CASTを使用します。

編集:

以下のコメントの@beruicと@ C-Fで述べているように、暗黙の変換(つまり、CASTもCONVERTも使用しない変換)を使用すると、精度が失われる可能性があります。詳細については、 CASTおよびCONVERT 、特にこのグラフィックス SQL Serverデータ型変換チャート を参照してください。この追加情報を使用しても、元のアドバイスは変わりません。可能な場合はCASTを使用します。

323
Matthew Farwell

Convertには、日付から文字列への変換用のスタイルパラメータがあります。

http://msdn.Microsoft.com/en-us/library/ms187928.aspx

27
jason saldo

CASTは標準SQLですが、CONVERTはそうではありません(方言T-SQLのみ)。datetimeの場合の変換には小さな利点があります。

cASTでは、式とターゲットタイプを指定します。 CONVERTには、変換のスタイルを表す3番目の引数があります。これは、文字列と日時の値の間など、一部の変換でサポートされています。たとえば、CONVERT(DATE、 '1/2/2012'、101)は、米国標準を表すスタイル101を使用してリテラル文字列をDATEに変換します。

よろしく、

9

上記の答え を展開するにはShaktiによりコピー、実際に2つの機能のパフォーマンスの違いを測定することができました。

この質問 のソリューションのバリエーションのパフォーマンスをテストしていましたが、CASTを使用すると標準偏差と最大ランタイムが大きくなることがわかりました。

Runtimes in milliseconds * DateTime型の精度 に従って、ミリ秒単位で最も近い1/300秒に丸められた時間

5
Elaskanator

誰もまだ気付いていないように見えるのは読みやすさです。持っている…

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

…よりも理解しやすいかもしれません…

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )
3
Atario

CASTはANSI標準を使用します。移植性の場合、これは他のプラットフォームでも機能します。 CONVERTは、SQLサーバーに固有です。しかし、非常に強力な機能です。日付に異なるスタイルを指定できます

3
RakeshP