日期:2014-05-17  浏览次数:20755 次

关于字符串和数据表的混合查询的一个难题,请大师们帮个忙。
关于字符串和数据表的混合查询的一个难题,请大师们帮个忙。
问题是这样的:
有一串字符串比如'a','b','c','d','e','f'
另有一个数据表暂时命名为Tb,假设表上有个字段col1
然后想查询出一个结果是字符串中有,但是Tb.col1中没有的。这是不是好难?
本人分不多,50分请别介意。

------解决方案--------------------

declare @s varchar(100)
set @s='''a'',''b'',''c'',''d'',''e'',''f'''

select *
from tb
where CHARINDEX(@s,col1)>0


变量@s在数据库里定义时,两个单引号代表一个单引号
外部传进来的变量可以这么写:string s="'a','b','c','d','e','f'";

------解决方案--------------------
USE CSDN
GO

CREATE TABLE #temp(col1 VARCHAR(10))
INSERT #temp
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd'

--楼主没说你TB表中col1的数据的结构,参考如下:
DECLARE @string VARCHAR(100)
SET @string = 'a,b,c,d,e,f'

SELECT b.string FROM
(SELECT string=CONVERT(XML, '<root><v>'+replace(@string,',','</v><v>')+'</v></root>')) a
OUTER APPLY
(SELECT string = C.v.value('.','NVARCHAR(MAX)') FROM a.string.nodes('/root/v') C(v)) b
WHERE NOT EXISTS
(
SELECT 1 FROM #temp m
WHERE m.col1 = b.string
)

/*
string
a
e
f
*/