Также как и практически в любом языке в SQL существует явное и неявное приведение типов. Неявное приведение типов работает когда более маленький тип приводят к большему, допустим smallint к int. В таком случае не нужно явно указывать, что необходимо выполнить приведение. Таким образом, чтобы привести тип данных int к строковому нужно указать это явно:
1
|
SELECT 'Средний возраст =' + AVG(Age) FROM Student
|
Выдаст ошибку, так как нету явного преобразования типов.
1
|
SELECT 'Средний возраст =' + CAST(AVG(Age) AS CHAR(3)) FROM Student
|
Cast имеет следующий синтаксис:
1
|
CAST( выражение AS тип_данных)
|
Следует учитывать, что не любой тип можно преобразовать в другой. Таблица преобразований можно посмотреть для каждой базы данных, но следует понимать, что большинство преобразований с помощью CAST возможны. Не преобразуются более менее специфические типы, такие как image, xml и т.д.
Следует отметить, что агрегатные функции возвращают тот же тип данных, что и столбец к которому она была применена, поэтому для того, чтобы вывести средний возраст с вещественной частью нужно использовать явное приведение типов. Поэтому преобразуем столбец Age к вещественному типу и решим проблему:
1
|
SELECT 'Средний возраст =' + CAST(AVG(Age AS NUMERIC(4,2)) AS CHAR(3)) FROM Student
|
В этом примере можно использовать и неявное преобразование типов:
1
|
SELECT 'Средний возраст =' + CAST(AVG(Age * 1.0) AS CHAR(3)) FROM Student
|
Другая функция для явного приведения типов CONVERT:
1
|
CONVERT (тип_данных, выражение [, стиль])
|
Основное отличие от CAST заключается в возможности использования стилей. Преобразуем год из строки в тип datetime:
1
|
CONVERT(datetime,'20120713')
|
Приведем некоторые значения стилей, например, для float и real существуют следующие стили:
- 0 — не более 6 разрядов
- 1 — 8 разрядов
- 2 — 16 разрядов
1
|
CONVERT(REAL,'2.0120713', 0)
|
|