T-SQL Cast против Convert - PullRequest
       58

T-SQL Cast против Convert

305 голосов
/ 02 апреля 2009

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

Ответы [ 6 ]

323 голосов
/ 02 апреля 2009

CONVERT зависит от SQL Server, CAST соответствует ANSI.

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

EDIT:

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

27 голосов
/ 02 апреля 2009

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

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

9 голосов
/ 27 марта 2014

CAST - это стандартный SQL, но CONVERT - нет (только для диалекта T-SQL), у нас есть небольшое преимущество для преобразования в случае datetime

с CAST, вы указываете выражение и тип цели; с CONVERT, есть третий аргумент, представляющий стиль для преобразования, который поддерживается для некоторых преобразований, например, между символами строки и значения даты и времени. Например, CONVERT (DATE, '1/2/2012', 101) преобразует буквенная строка символов в DATE с использованием стиля 101, представляющего стандарт США.

С уважением,

5 голосов
/ 13 июня 2018

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

Я тестировал производительность вариантов решения для этого вопроса и обнаружил, что стандартное отклонение и максимальное время выполнения были больше при использовании CAST.

Runtimes in milliseconds * Время в миллисекундах с округлением до ближайшей 1/300 секунды с точностью до типа DateTime

3 голосов
/ 23 февраля 2018

Что-то, что никто, кажется, еще не заметил, это читабельность. Имея ...

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

... может быть легче понять, чем ...

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )
3 голосов
/ 01 декабря 2016

CAST использует стандарт ANSI. В случае переносимости это будет работать на других платформах. CONVERT специфичен для сервера sql. Но это очень сильная функция. Вы можете указать разные стили для дат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...