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