T-SQL Cast versus Convert

325

Was ist die allgemeine Anleitung, wann Sie im CASTVergleich zu verwenden sollten CONVERT? Gibt es Leistungsprobleme im Zusammenhang mit der Auswahl eines gegenüber dem anderen? Ist man näher an ANSI-SQL?

BuddyJoe
quelle

Antworten:

339

CONVERTist SQL Server-spezifisch, CASTist ANSI.

CONVERTist flexibler, da Sie Daten usw. formatieren können. Abgesehen davon sind sie ziemlich gleich. Wenn Sie sich nicht für die erweiterten Funktionen interessieren, verwenden SieCAST .

BEARBEITEN:

Wie von @beruic und @CF in den Kommentaren unten angegeben, kann es zu Genauigkeitsverlusten kommen, wenn eine implizite Konvertierung verwendet wird (dh wenn Sie weder CAST noch CONVERT verwenden). Weitere Informationen finden Sie unter CAST und CONVERT und insbesondere in dieser Grafik: SQL Server-Datentypkonvertierungstabelle . Mit diesen zusätzlichen Informationen bleibt der ursprüngliche Rat unverändert. Verwenden Sie nach Möglichkeit CAST.

Matthew Farwell
quelle
5
Ich glaube auch, dass es einige numerische Konvertierungen gibt, bei denen CAST verwendet werden sollte, um die Präzision zu erhalten, aber ich habe Probleme, eine zuverlässige Quelle für diese Informationen zu finden.
Berühmte
2
@beruic Sie haben Recht, MSDN enthält Informationen: msdn.microsoft.com/en-us/library/ms187928.aspx CAST ist erforderlich, um die Genauigkeit beim Konvertieren zwischen DECIMAL- und NUMERIC-Typen zu gewährleisten.
CF
@CF Wo sehen Sie diese Informationen? Ich bin dem Link gefolgt, der die allgemeine Seite zu CAST und CONVERT öffnet, und die einzigen Informationen zur Genauigkeit, die ich finden kann, betreffen die Konvertierung von Gleitkommawerten in wissenschaftlicher Notation. Könnte ich mich in meinem ersten Kommentar irren?
Berühmte
6
@beruic Es geht um dieses Bild am Ende des Artikels i.msdn.microsoft.com/dynimg/IC170617.gif Nun denke ich, dass der Präzisionsverlust möglicherweise bei der impliziten Konvertierung auftreten kann und nicht auftritt, wenn entweder CAST oder CONVERT verwendet wird . Es ist nicht ganz klar ...
CF
2
@CF Ich stimme zu, dass es nicht sehr klar ist, und es sollte definitiv eine spezifischere Dokumentation darüber geben, also hoffen wir, dass Microsoft dies tut. Aber dort gut gesehen :)
Berühmter
12

CAST ist Standard-SQL, CONVERT jedoch nur für den Dialekt T-SQL. Wir haben einen kleinen Vorteil für die Konvertierung im Fall von datetime.

Mit CAST geben Sie den Ausdruck und den Zieltyp an. Bei CONVERT gibt es ein drittes Argument, das den Stil für die Konvertierung darstellt und für einige Konvertierungen unterstützt wird, z. B. zwischen Zeichenfolgen und Datums- und Zeitwerten. Beispielsweise konvertiert CONVERT (DATE, '1/2/2012', 101) die Literalzeichenfolge in DATE unter Verwendung des Stils 101, der den US-Standard darstellt.

Abdeloihab Bourassi
quelle
8

Um die obige Antwort von Shakti zu erweitern , konnte ich tatsächlich einen Leistungsunterschied zwischen den beiden Funktionen messen.

Ich habe die Leistung von Variationen der Lösung für diese Frage getestet und festgestellt, dass die Standardabweichung und die maximalen Laufzeiten bei der Verwendung größer waren CAST.

Laufzeit in Millisekunden * Zeiten in Millisekunden, gerundet auf die nächste 1 / 300stel Sekunde gemäß der Genauigkeit des DateTimeTyps

Elaskanator
quelle
6

Etwas, das noch niemand bemerkt zu haben scheint, ist die Lesbarkeit. Haben…

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

… Kann leichter zu verstehen sein als…

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )
Atario
quelle
2
Aber ich denke, das CAST ist normalerweise besser lesbar. CAST(Column1 AS int)ist logischer zu lesen als CONVERT(int, Column1)auch für lange Ausdrücke
S.Serpooshan
4

CAST verwendet den ANSI-Standard. Im Falle der Portabilität funktioniert dies auf anderen Plattformen. CONVERT ist spezifisch für SQL Server. Ist aber sehr starke Funktion. Sie können verschiedene Stile für Datumsangaben angeben

RakeshP
quelle