将逗号deligma字符串传递给sql server中的IN子句

时间:2014-05-23 04:47:10

标签: sql-server-2008

SQL语句:

(select top 1 [egrp_name] from [Enotify Group] where [egrp_id] in (a.grp_id) )

a.grp_id的值为'0,1145',我收到错误

Conversion failed when converting the varchar value '0,1145' to data type int.

在上述情况下,有人可以告诉我如何将'0,1145'更改为0,1145,因此我的查询确实有效,如果他们有其他任何方式可以执行此操作

1 个答案:

答案 0 :(得分:1)

您可以使用拆分字符串函数将逗号分隔的字符串更改为表格。

select top(1) [egrp_name] 
from [Enotify Group] 
where [egrp_id] in (
                   select Value 
                   from dbo.SplitInts(a.grp_id)
                   ); 

如果您愿意,可以使用分割字符串函数的一个版本:

create function dbo.SplitInts(@Values nvarchar(max)) returns table with schemabinding
as
return 
(  
  select T2.X.value(N'.', N'int') as Value
  from (select cast(N'<?X '+replace(@Values, N',', N'?><?X ') + N'?>' as xml).query(N'.')) as T1(X)
    cross apply T1.X.nodes(N'/processing-instruction("X")') as T2(X)
);

或者您可以使用like

select top(1) [egrp_name] 
from [Enotify Group] 
where ','+a.grp_id +',' like '%,'+cast(egrp_id as varchar(11))+',%' ;