Ответы:
CONVERT
является специфическим для SQL Server, CAST
является ANSI.
CONVERT
более гибок в том, что вы можете форматировать даты и т. д. Кроме того, они почти одинаковы. Если вам не нужны расширенные функции, используйте CAST
.
РЕДАКТИРОВАТЬ:
Как отмечают @beruic и @CF в комментариях ниже, возможна потеря точности при использовании неявного преобразования (то есть, когда вы не используете ни CAST, ни CONVERT). Для получения дополнительной информации см. CAST и CONVERT и, в частности, этот рисунок: Таблица преобразования типов данных SQL Server . С этой дополнительной информацией первоначальный совет остается прежним. Используйте CAST, где это возможно.
Преобразование имеет параметр стиля для преобразования даты в строку.
CAST - это стандартный SQL, но CONVERT предназначен только для диалекта T-SQL. У нас есть небольшое преимущество для конвертации в случае datetime.
С помощью CAST вы указываете выражение и тип цели; в CONVERT есть третий аргумент, представляющий стиль для преобразования, который поддерживается для некоторых преобразований, например, между символьными строками и значениями даты и времени. Например, CONVERT (DATE, '1/2/2012', 101) преобразует строку буквенных символов в DATE, используя стиль 101, представляющий стандарт США.
Чтобы расширить приведенный выше ответ, скопированный Шакти , я фактически смог измерить разницу в производительности между этими двумя функциями.
Я тестировал производительность вариантов решения этого вопроса и обнаружил, что стандартное отклонение и максимальное время выполнения были больше при использовании CAST
.
* Время в миллисекундах с округлением до ближайшей 1/300 секунды в соответствии с точностью DateTime
типа
То, что никто, кажется, еще не заметил, это читабельность. Имея ...
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
... может быть легче понять, чем ...
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
логичнее читать, чем CONVERT(int, Column1)
даже для длинных выражений