在 T-SQL 中将字符串中的 int 转换为整数

Mur*_*HAN 2 sql t-sql sql-server ssms

我需要将字符串转换为整数,但出现类型错误。

declare @stringinteger nvarchar(255) null;
set @stringinteger='1,2,3,4'

select *
from user
where id in (@stringinteger) 
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

将 nvarchar 值“1,2,3,4”转换为数据类型 int 时转换失败

Gor*_*off 6

有两种方法可以处理这个问题:动态 SQL 和分割字符串。

对于后者,您可以使用string_split()(在 SQL Server 2016 中引入)或类似的函数(它们遍布网络,google“string split sql server”):

select *
from user
where id in (select cast(value as int) from string_split(@stringinteger, ',')) ;
Run Code Online (Sandbox Code Playgroud)

动态 SQL 如下所示:

declare @stringinteger nvarchar(255) null;
set @stringinteger = '1,2,3,4';

declare @sql nvarchar(max);
set 'select *
from user
where id in (@stringinteger)';

set @sql = replace(@sql, '@stringinteger', @stringinteger);

exec sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)

请注意,在 SQL Server 中,您应该始终提供字符类型的长度。如果您忽略它,则默认值会因上下文而异 - 并且您的代码可能不会执行您所期望的操作。

  • @MuratCanOĞUZHAN 正如 Gordan 所说,字符串分割器还有很多其他选择。谷歌一下“T-SQL String Splitter”。 (2认同)