SQL怎么判断“1,2,4”在“2,3,4,5,6”里

loveandkissyou 2015-12-01 01:41:18
类似于类别查找

a=1,2,4 是前端选的类别
b=2,3,4,5,6 是某个产品的类别集合,用一个字符串类型字段存着
c=1,7,8

怎么用sql判断只要 a 中的某一项在 b 中存在 即为真
c中任意一项不在b中,返回假

谢谢了
...全文
471 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveandkissyou 2015-12-03
  • 打赏
  • 举报
回复
哈哈哈,谢谢二位 我想用一句select搞定,不想写函数,不想用临时表
Ginnnnnnnn 2015-12-01
  • 打赏
  • 举报
回复
简单写个循环就可以了

DECLARE @a VARCHAR(100)='1,2,4',
		@b VARCHAR(100)='2,3,4,5,6',
		@c VARCHAR(100)='1,7,8'

DECLARE @Flag BIT = 0,
		@Pos INT,
		@Var VARCHAR(5)

--判断 @a 和 @b
WHILE LEN(@a) > 0 AND @Flag = 0
BEGIN 
	SELECT @Pos= CHARINDEX(',',@a),
		   @Var = CASE WHEN @Pos > 0 THEN LEFT(@a,@Pos-1) ELSE @Var END,
		   @a = STUFF(@a,1,@Pos,'')	
	IF ','+ @b + ',' LIKE '%,' + @Var + ',%'
		SET @Flag = 1
END
SELECT @a,@Flag
SELECT @Flag = 1
--判断 @c 和 @b
WHILE LEN(@c) > 0 AND @Flag = 1
BEGIN 
	SELECT @Pos= CHARINDEX(',',@c),
		   @Var = CASE WHEN @Pos > 0 THEN LEFT(@c,@Pos-1) ELSE @Var END,
		   @c = STUFF(@c,1,@Pos,'')		
	IF ','+ @b + ',' NOT LIKE '%,' + @Var + ',%'
		SET @Flag = 0
END
SELECT @c,@Flag
道素 2015-12-01
  • 打赏
  • 举报
回复
参考下面语句,我只写了判断a的,判断c的逻辑类似

DECLARE @a VARCHAR(200)='1,2,4'
DECLARE @b VARCHAR(200)='2,3,4,5,6'
DECLARE @c VARCHAR(200)='1,7,8'

DECLARE @sxml XML
SET @sxml='<root><node>'+REPLACE(@a,',','</node><node>')+'</node></root>'
--INSERT INTO @tmp([SPLIT])
SELECT b.value('.','varchar(max)') FROM @sxml.nodes('root/node') AS s(b)
WHERE CHARINDEX(b.value('.','varchar(max)'),@b)>1
IF @@ROWCOUNT>0
	PRINT 'Found'
ELSE
	PRINT 'Not Found'

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧