问题不太明了。
IN 一个集合,这个集合可以是常量如 (1, 2, 3),也可以是个查询如 IN (SELECT id FROM user1)。
如果user1.id是字符串,可以使用CAST转换(数据库也会隐式得转换,不写也可以):
db.id IN (SELECT CAST(id AS int) FROM user1)
你还要IN 在organizationid的话,一个IN是不够的,用OR连起来
db.id IN (SELECT CAST(id AS int) FROM user1)
OR db.id IN (CAST(LTRIM(o.organizationid AS int)))
创建一个函数,把字符串变成表格
CREATE FUNCTION fn_StringSplitTable
(
@str NVARCHAR(MAX),
@split NVARCHAR(10)
)
RETURNS TABLE
AS
RETURN
(
SELECT B.id
FROM
(
SELECT [value] = CONVERT(XML , '
) A
OUTER APPLY
(
SELECT id = N.v.value('.' , 'nvarchar(100)')
FROM A.[value].nodes('/v') N ( v )
) B
)
Go
查询可以为
select * from tb where id IN (SELECT CAST(id AS INT) FROM dbo.fn_StringSplitTable('1,2,3', ','))
用charindex函数判断就好了,你写的判断语句都已经判断了,你的需求不清楚啊