Функции преобразования типов, CAST
Когда мы выполняем операции со значениями с разными типами данных, СУБД пытается выполнить преобразование и привести используемые значения к нужному типу. Например, в примере ниже мы сравниваем значения с типами STRING и INT. Чтобы выполнить это сравнение СУБД автоматически сконвертирует строковое значение в числовое.
MySQL 8.4SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
MySQL 8.4SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
Но не все преобразования СУБД может сделать автоматически, и тогда необходимо делать явное преобразование типов.
Для этого в MySQL есть две очень схожие функции CAST и CONVERT.
Для этого в PostgreSQL есть функция CAST и оператор ::.
Синтаксис
CAST(значение AS тип)
CONVERT(значение, тип)- значение
Что нужно преобразовать: число, строка, дата или столбец таблицы.
- тип
Тип, в который преобразуется значение. Доступные типы перечислены ниже.
Например,
MySQL 8.4SELECT CAST(12005.6 AS DECIMAL) AS cast_example, CONVERT(12005.4, DECIMAL) AS convert_example;
CAST(значение AS тип)
значение::тип- значение
Что нужно преобразовать: число, строка, дата или столбец таблицы.
- тип
Тип, в который преобразуется значение. Доступные типы перечислены ниже.
Например,
MySQL 8.4SELECT CAST(12005.6 AS INTEGER) AS cast_example, 12005.4::INTEGER AS operator_example;
Функция CAST умеет конвертировать переданное значение в любой из следующих типов:
Функция CAST умеет конвертировать переданное значение в любой из следующих типов:
Невозможность любой конвертации
Использование функции CAST накладывает требования к формату исходного значения. И сразу же напрашивается вопрос, что произойдёт, если данный формат не будет соответствовать необходимому? Например, если попробовать сконвертировать случайный текст во временной тип данных:
MySQL 8.4SELECT CAST('SQL Academy' AS DATETIME) AS invalid_cast;
В этом случае MySQL вернёт NULL вместо сконвертированного значения.
MySQL 8.4SELECT CAST('SQL Academy' AS TIMESTAMP) AS invalid_cast;
В этом случае PostgreSQL вернёт ошибку, так как строка не может быть сконвертирована в дату.
Самопроверка
Итак, за что отвечает функция CAST в SQL 🧐?