sql中比较一个字符串中是否含有另一个字符串中的一个字符
发布网友
发布时间:2022-04-21 09:35
我来回答
共4个回答
热心网友
时间:2023-11-09 02:35
1、既然你要判断其中一个是否包含了另一个,那你条件肯定要给SQL,SQL才能帮你找到的,2、这个条件肯定是你要给出的。比如str1='1`2`3`4`5'str2='1`2`3`4'那你叫SQL判断的其中的话,可以:Select
CharIndex('5',str1)
--这里的“5”具体要代入什么值去判断,就要你给出来了。Select
CharIndex('2`3',str1)
--这类的SQL是可以帮你去判断的。不包含的话就返回0否则就返回第一个相同字符的位置,比如这个就返回3 给你写一个函数来操作:
Create
function
fSearch(@inStr
varchar(1000),@fndStr
varchar(1000),@doc
varchar(10))
returns
bit
as
begin
declare
@ii
int,@rStr
varchar(1000),@c
varchar(1000)
select
@rStr=@fndStr
while
len(@rStr)>0
begin
Select
@ii=Charindex(@doc,@rStr)
if
@ii=0
begin
return
0
end
else
begin
select
@c=substring(@rStr,1,@ii-1)
if
charIndex(@c,@inStr)>0
return
1
else
begin
select
@rStr=substring(@rStr,@ii+len(@doc),len(@rStr))
end
end
end
return
0
end
--参数:@inStr
待搜索字串,@fndStr
搜索字串,@doc
分隔符--
例:select
dbo.fSearch('1,2,3,4,5,6','3,6,5,8,2',',')
返回0-不匹配,返回1-匹配(@instr中有@fndStr内容)--可以用于表搜索,如:--
Select
*,dbo.fSearch(str,'3,6,5,8,2',',')
as
是否匹配 from
表名--
@fndStr和@doc两个参数就需要你自己提供了,@inStr可以是数据表里的某个待搜索字段名
热心网友
时间:2023-11-09 02:36
先建一张辅助表:
declare @a int
set @a=0
while @a<10000
begin
insert into nums select @a
set @a=@a+1
end
然后写一个函数:
alter function dbo.charindex_of(@str1 varchar(100) ,@str2 varchar(100))
returns int
as
begin
declare @a int
select @a=count(*) from (select subString(@str2,n,charindex('`',@str2+'`',n)-n) rn
from nums where n<len(@str2) and subString('`'+@str2,n,1)='`') a,
(select subString(@str1,n,charindex('`',@str1+'`',n)-n) rn
from nums where n<len(@str1) and subString('`'+@str1,n,1)='`') b
where a.rn=b.rn
return @a
end
然后就可以比较了
declare @str1 varchar(100) ,@str2 varchar(100)
set @str1='1`2`3`4`5'
set @str2='1`2`3`4'
select dbo.charindex_of(@str1,@str2)
返加的是匹配的个数,当然大于0就说明满足条件,如有疑问,可以HI我
热心网友
时间:2023-11-09 02:36
这个不太好实现吧,要是数据固定的话就好实现了,你参考下这两个函数
charindex()或patindex()
热心网友
时间:2023-11-09 02:37
select charindex('1234','12345')
为1存在,0为不存在