Различные способы преобразования целого значения в строку
Пересказ статьи Daniel Calbimonte. Different ways to Convert a SQL INT Value into a String Value
Здесь я покажу различные способы преобразования данных в SQL Server из целого типа в строковый с помощью разных операторов SQL.
Начинаем
Пусть у нас есть числовой столбец OrderQty в таблице WorkOrder в производственной базе данных SQL.
SELECT [OrderQty]
FROM [Production].[WorkOrder]
При попытке конкатенировать символы или строку с числом в операторе SELECT мы получим сообщение об ошибке.
Давайте рассмотрим пример.
SELECT 'Order quantity:' + space(1) + [OrderQty]
FROM [Production].[WorkOrder]
Этот код генерирует следующее сообщение об ошибке:
Conversion failed when converting the varchar value 'Order quantity: ' to data type int.
(Преобразование значения varchar 'Order quantity' в тип данных int потерпело неудачу. )
Поэтому нам нужно конвертировать OrderQty, который является числовым в строку, чтобы было возможным конкатенировать строку с числом. Для этого мы испытаем различные методы.
Функция CAST для преобразования целого в строку
Следующий пример показывает как использовать функцию CAST.
В этом примере мы конвертируем целочисленный столбец OrderQty в varchar с помощью такого синтаксиса SELECT CAST:
SELECT 'Order quantity:' + space(1) + CAST(OrderQty as varchar(20)) as Ordqty
FROM [Production].[WorkOrder]
Код возвращает следующие результаты:
Функция CONVERT для преобразования целого числа в строку
CONVERT подобна CAST, но синтаксис несколько отличается, хотя результаты совпадают.
SELECT 'Order quantity:' + space(1) + CONVERT(varchar(20), OrderQty) as Ordqty
FROM [Production].[WorkOrder]
Функция CONCAT для соединения различных типов данных
Еще одной функцией для неявного преобразования при конкатенации значений является функция CONCAT.
Этот пример показывает как конкатенировать строковые значения с целыми значениями. CONCAT неявно преобразует значения в строки. Если вам нужно конкатенировать данные различных типов, CONCAT - лучший вариант по сравнению с использованием символа +.
SELECT CONCAT('Order quantity:', space(1), OrderQty) as Ordqty
FROM [Production].[WorkOrder]
Если вам нужно преобразовать целое в строку для выполнения сравнения, лучше использовать CAST и CONVERT.
Преобразование целого в строку в таблице
Например, мы используем следующий запрос SQL для создания таблицы с именем dbo.workorder на основе таблицы Production.WorkOrder из базы данных Adventureworks.
SELECT *
INTO dbo.workorder
FROM [Production].[WorkOrder]
Использование GUI
Затем мы можем использовать GUI для изменения типа столбца из целого в строку. В SSMS мы можем использовать команду меню Design для изменения типа данных, выполнив щелчок правой кнопкой на имени таблицы.
В конструкторе поменяйте тип данных OrderQty int на nvarchar(50) и сохраните изменения.
Вы можете получить следующее сообщение об ошибке:
Saving changes is not permitted. The changes that you have made require the following tables to be dropped and re-created. You have either made changes to a table that can't be re-created or enabled the option Prevent saving changes that require the table to be re-created.
(Не допускается сохранение изменений. Изменения, которые вы сделали, требуют удаления и воссоздания следующих таблиц. Вы можете либо делать изменения в таблице, которая не может быть воссоздана или включить опцию "Prevent saving changes that require the table to be re-created".)
Чтобы решить эту проблему, пройдите Tools > Options и далее Designers > Table and Database Designers, и снимите флажок "Prevent saving changes that require table re-creation" и щелкните ОК для сохранения. Обратите внимание на сообщение ниже, которое будет вызывать необходимость пересоздание таблицы.
Использование T-SQL
Если вы не любите GUI или SSMS, то всегда можете использовать оператор ALTER.
Следующий пример показывает как установить для столбца orderqty тип данных varchar(50).
ALTER TABLE dbo.workorder ALTER COLUMN orderqty varchar(50)
Для изменения типа данных в int можно применить следующий код.
ALTER TABLE dbo.workorder ALTER COLUMN orderqty int
Преобразование целого в строку в предложении WHERE
В этом запросе SQL мы показываем как сравнить строку с числовым значением. OrderQty является числовым, и мы сравниваем его со строковым значением 8.
SELECT TOP 5 *
FROM dbo.workorder
WHERE OrderQty = '8'
Обратите внимание, что оператор = может сравнивать числовое значение со строкой.
Преобразование целого в строку при соединении таблиц
Чтобы соединить две таблицы, у одной из которых используется строковые значения, а у другой целочисленные, вам нет необходимости конвертировать типы данных таблицы. T-SQL будет выполнять преобразование и сравнение неявно. Одной таблицей является dbo.workorder со столбцом OrderQty типа varchar(50) , а другой - Production.WorkOrder со столбцом OrderQty типа int.
Следующий пример иллюстрирует, как это работает.
SELECT TOP 50 wo.Orderqty, wo.Productid, pwo.Stockedqty
FROM dbo.workorder wo
INNER JOIN Production.WorkOrder pwo ON wo.OrderQty = pwo.OrderQty
Ссылки по теме
1. Преобразование типов и оператор CAST
2. Функция CONCAT
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой