Antworten:
CONVERT
ist SQL Server-spezifisch, CAST
ist ANSI.
CONVERT
ist 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.
Convert verfügt über einen Stilparameter für die Konvertierung von Datum in Zeichenfolge.
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.
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
.
* Zeiten in Millisekunden, gerundet auf die nächste 1 / 300stel Sekunde gemäß der Genauigkeit des DateTime
Typs
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
)
CAST(Column1 AS int)
ist logischer zu lesen als CONVERT(int, Column1)
auch für lange Ausdrücke