这个SQL语句什么写

zenggao 2004-09-30 10:01:02
有一个表,表中有一个字段a,内容是:1,2,3,4,5,6,。。。。。。。。
有一个变量@b='3,6'
问题:
我想知道字段A中有没有包含变量@b中的内容,比如字段A中包含有3也有6,那么就返回TRUE,如果没有3也没有6就返回FALSE
,如果只有3或只有6也返回TRUE。
请问我应该什么写。谢谢。
...全文
220 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilons1 2004-10-01
  • 打赏
  • 举报
回复
用得着这么麻烦不?
declare @b = '3,6'
select * from T1 where charindex(@b , [字段])>0 不就好了
不记得charindex 函数里的东西有没有写反,自己查一下帮助就好啦
pbsql 2004-09-30
  • 打赏
  • 举报
回复
写个函数来判断:
CREATE FUNCTION dbo.f_1(@str varchar(8000),@c varchar(10),@st varchar(8000))
RETURNS bit
AS
BEGIN
DECLARE @s varchar(8000),@ret bit
SET @ret=1
SET @s=@str
WHILE CHARINDEX(@c,@s)>0
BEGIN
if @c+@st+@c not like '%'+@c+LEFT(@s,CHARINDEX(@c,@s)-1)+@c+'%'
BEGIN
SET @ret=0
BREAK
END
SET @s=RIGHT(@s,LEN(@s)-CHARINDEX(@c,@s))
END
if @c+@st+@c not like '%'+@c+@s+@c+'%'
SET @ret=0
RETURN(@ret)
END
go

--调用
declare @b varchar(8000)
set @b='3,6'
select dbo.f_1(@b,',',a) from t
littlefishli 2004-09-30
  • 打赏
  • 举报
回复
不能把@b解析出来再查询吗??
干嘛这么复杂?
skyboy0720 2004-09-30
  • 打赏
  • 举报
回复
怎么个行不通!!我测试是没问题的,不知道你是怎么测试的!!
sunshareforever 2004-09-30
  • 打赏
  • 举报
回复
you can do it on procedure
zenggao 2004-09-30
  • 打赏
  • 举报
回复
@b变量是字符型,注意是变量,里边的数据是不确定的,所以不能用 hdhai9451的方法。
我试了skyboy0720的方法,感觉行不通。
UP
chuangwang 2004-09-30
  • 打赏
  • 举报
回复
不知道@b变量是什么类型的?
skyboy0720 2004-09-30
  • 打赏
  • 举报
回复
set nocount on
declare @s varchar(8000),@sql nvarchar(4000)
set @s='3,6'
set @sql='select '''+replace(@s,',',''' col union all select ''')+''' col'
set @sql='select * into ##tem from ('+@sql+') t'
exec sp_executesql @sql
if exists(select 1 from 表 where a in(select col from ##tem))
print 'true'
else
print 'false'
drop table ##tem
set nocount off
Andy__Huang 2004-09-30
  • 打赏
  • 举报
回复
select flag=case when charindex('3',字段a)>0 or charindex('6',字段a)>0 then [TRUE] else [FALSE] end
from tb
wsnow002 2004-09-30
  • 打赏
  • 举报
回复
奇思妙想!
skyboy0720(神仙?妖怪?谢谢!)
symsss 2004-09-30
  • 打赏
  • 举报
回复
崇拜
skyboy0720(神仙?妖怪?谢谢!)
yjdn 2004-09-30
  • 打赏
  • 举报
回复
--测试四,另一种的求含有3,6或只含3或6的办法
declare @b varchar(100)
declare @c varchar(10)
declare @d varchar(10)
set @b='3,6'
set @c=replace(@b,',','')
set @d=replace(@d,',','%')
select a,case when a like '%['+@c+']%' or a like '%'+@d+'%' then 'true' else 'false' end from tb

--结果
1,2,3,4,5,6    true
2,3,4         true
4,5,6         true
7,8,9         false


--感觉只要"含有3或者含有6“这个条件就可以了吧?”同时含有3和6“是不是多余了?
yjdn 2004-09-30
  • 打赏
  • 举报
回复
--测试三,含有(3,6)中任意一个
declare @b varchar(100)
declare @c varchar(10)
declare @d varchar(10)
set @b='3,6'
set @c=replace(@b,',','')
select a,case when a like '%['+@c+']%' then 'true' else 'false' end from tb
--结果
1,2,3,4,5,6    true
2,3,4         true
4,5,6         true
7,8,9         false
yjdn 2004-09-30
  • 打赏
  • 举报
回复
--建表
create table tb(a varchar(100))
--插入数据
insert into tb select '1,2,3,4,5,6'
union select
'2,3,4'
union select
'4,5,6'
union select
'7,8,9'

--测试一
declare @b varchar(100)
declare @c varchar(10)
declare @d varchar(10)
set @b='3,6'
set @c=left(@b,1)
set @d=right(@b,1)
select a,case when a like '%'+@c+'%'+@d+'%' or a like '%'+@c+'%' or a like '%'+@d+'%'then 'true' else 'false' end from tb

--结果:
1,2,3,4,5,6    true
2,3,4         true
4,5,6         true
7,8,9         false

--测试二如果只有3和6都显示false的话,变量@b不管有多长都好办

declare @b varchar(100)
declare @c varchar(10)
set @b='3,6'
set @c=replace(@b,',','%')
select a,case when a like '%'+@c+'%' then 'true' else 'false' end from tb
--结果:
1,2,3,4,5,6 true
2,3,4 false
4,5,6 false
7,8,9 false

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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