Odpowiedzi:
CONVERT
jest specyficzny dla SQL Server, CAST
jest ANSI.
CONVERT
jest bardziej elastyczny, ponieważ można formatować daty itp. Poza tym są one prawie takie same. Jeśli nie zależy Ci na rozszerzonych funkcjach, użyj CAST
.
EDYTOWAĆ:
Jak zauważyli @beruic i @CF w komentarzach poniżej, możliwa jest utrata precyzji, gdy używana jest niejawna konwersja (to jest taka, w której nie używasz CAST ani CONVERT). Aby uzyskać więcej informacji, zobacz CAST i CONVERT, aw szczególności ta grafika: Tabela konwersji typu danych programu SQL Server . Dzięki tym dodatkowym informacjom oryginalne porady pozostają takie same. W miarę możliwości używaj CAST.
Konwertuj ma parametr stylu dla konwersji daty na ciąg znaków.
CAST jest standardowym SQL, ale CONVERT dotyczy tylko dialektu T-SQL. Mamy małą zaletę konwersji w przypadku datetime.
Za pomocą CAST podajesz wyrażenie i typ docelowy; w przypadku CONVERT istnieje trzeci argument reprezentujący styl konwersji, który jest obsługiwany w przypadku niektórych konwersji, na przykład między ciągami znaków a wartościami daty i godziny. Na przykład CONVERT (DATE, '1/2/2012', 101) konwertuje dosłowny ciąg znaków na DATE przy użyciu stylu 101 reprezentującego standard Stanów Zjednoczonych.
Aby rozwinąć powyższą odpowiedź skopiowaną przez Shakti , faktycznie byłem w stanie zmierzyć różnicę wydajności między tymi dwiema funkcjami.
Testowałem wydajność odmian rozwiązania tego pytania i stwierdziłem, że odchylenie standardowe i maksymalne czasy działania były większe przy użyciu CAST
.
* Czasy w milisekundach, w zaokrągleniu do 1/300 sekundy, zgodnie z dokładnością DateTime
typu
Coś, czego nikt jeszcze nie zauważył, to czytelność. Mający…
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
… Może być łatwiejsze do zrozumienia niż…
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
jest bardziej logiczne do odczytania niż w CONVERT(int, Column1)
przypadku długich wyrażeń