Функции преобразования типов, CAST

Когда мы выполняем операции со значениями с разными типами данных, СУБД пытается выполнить преобразование и привести используемые значения к нужному типу. Например, в примере ниже мы сравниваем значения с типами STRING и INT. Чтобы выполнить это сравнение MySQL автоматически сконвертирует строковое значение в числовое.

MySQL
SELECT '50' > 49, '50' > 51;
'50' > 49'50' > 51
10

Но не все преобразования СУБД может сделать автоматически, и тогда необходимо делать явное преобразование типов. Для этого в MySQL есть две очень схожие функции CAST и CONVERT.

Синтаксис

MySQL
CAST(значение AS тип_для_конвертации);
CONVERT(значение, тип_для_конвертации);

Например,

MySQL
SELECT CAST(12005.6 AS DECIMAL), CONVERT(12005.4, DECIMAL);
CAST(12005.6 AS DECIMAL)CONVERT(12005.4, DECIMAL)
1200612005

Функция CAST умеет конвертировать переданное значение в любой из следующих типов:

ТипОписание
DATEКонвертирует значение в DATE. Формат: "YYYY-MM-DD".
DATETIMEКонвертирует значение в DATETIME. Формат: "YYYY-MM-DD hh:mm:ss".
TIMEКонвертирует значение в TIME. Формат: "hh:mm:ss".
DECIMAL[(M[,D])]Конвертирует значение в DECIMAL. Имеет два необязательных аргумента M и D, определяющих максимальное количество знаков до и после запятой соответственно. По умолчанию, D равен 0, а M равен 10.
CHAR[(N)]Конвертирует значение в CHAR. В качестве необязательного аргумента можно передать максимальную длину строки.
SIGNEDКонвертирует значение в значение BIGINT.
UNSIGNEDКонвертирует значение в беззнаковое значение BIGINT.
BINARYКонвертирует значение в BINARY.
YEARКонвертирует значение в год.

Невозможность любой конвертации

Использование функции CAST накладывает требования к формату исходного значения. И сразу же напрашивается вопрос, что произойдёт, если данный формат не будет соответствовать необходимому? Например, если попробовать сконвертировать случайный текст во временной тип данных:

MySQL
SELECT CAST('SQL Academy' AS DATETIME);
CAST('SQL Academy' AS DATETIME)
<NULL>

В этом случае MySQL вернёт NULL вместо сконвертированного значения.

Самопроверка

Итак, за что отвечает функция CAST в SQL 🧐?