Skip to content

Различные способы преобразования целого значения в строку

Пересказ статьи 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
Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.