T-SQL Cast против Convert
каково общее руководство, когда вы должны использовать CAST
и CONVERT
? Есть ли проблемы с производительностью, связанные с выбором одного против другого? Один ближе к ANSI-SQL?
6 ответов
CONVERT
специфичен для SQL Server,CAST
является ANSI.
CONVERT
более гибкая в том, что вы можете в формате даты и т. д. В остальном они почти одинаковы. Если вы не заботитесь о расширенных функциях, используйте CAST
.
EDIT:
как отмечено @beruic и @C-F в комментариях ниже, возможна потеря точности при использовании неявного преобразования (то есть там, где вы не используете ни приведение, ни преобразование). Дополнительную информацию см. литье и преобразование и в частности это графический: диаграмма преобразования типов данных SQL Server. С этой дополнительной информацией первоначальный совет по-прежнему остается прежним. Используйте CAST, где это возможно.
CAST является стандартным SQL, но CONVERT не является (только для диалекта T-SQL), у нас есть небольшое преимущество для преобразования в случае datetime
с помощью CAST вы указываете выражение и целевой тип; с CONVERT есть третий аргумент, представляющий стиль для преобразования, который поддерживается для некоторых преобразований, например между символами строки и значения даты и времени. Например, CONVERT (DATE, '1/2/2012', 101) преобразует литерал символьной строки в дату с помощью стиля 101, представляющий стандарт США.
с уважением,
CAST использует стандарт ANSI. В случае переносимости, это будет работать на других платформах. Преобразование относится к sql server. Но очень сильная функция. Вы можете указать разные стили для dates
что-то, что никто, кажется, еще не заметил, - это читаемость. Имея...
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
...может быть проще понять, чем...
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
расширить на ответ вышескопировать Шакти, Я действительно смог измерить разницу в производительности между двумя функциями.
Я тестировал производительность вариаций решения для этот вопрос и обнаружил, что стандартное отклонение и максимальное время выполнения были больше при использовании CAST
.
*времена в миллисекундах, округленных к близко 1/300th из секунда согласно точность DateTime
тип