T-SQL Cast против Convert

каково общее руководство, когда вы должны использовать CAST и CONVERT? Есть ли проблемы с производительностью, связанные с выбором одного против другого? Один ближе к ANSI-SQL?

6 ответов


CONVERT специфичен для SQL Server,CAST является ANSI.

CONVERT более гибкая в том, что вы можете в формате даты и т. д. В остальном они почти одинаковы. Если вы не заботитесь о расширенных функциях, используйте CAST.

EDIT:

как отмечено @beruic и @C-F в комментариях ниже, возможна потеря точности при использовании неявного преобразования (то есть там, где вы не используете ни приведение, ни преобразование). Дополнительную информацию см. литье и преобразование и в частности это графический: диаграмма преобразования типов данных SQL Server. С этой дополнительной информацией первоначальный совет по-прежнему остается прежним. Используйте CAST, где это возможно.


Convert имеет параметр стиля для преобразования даты в строку.

http://msdn.microsoft.com/en-us/library/ms187928.aspx


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.

Runtimes in milliseconds *времена в миллисекундах, округленных к близко 1/300th из секунда согласно точность DateTime тип