SQL查询中怎样判断一个长字符串 [包含] 另一个字段的值?

时间:2022-05-09 15:05:34
比如:name字段中有个abcd的值
select * from tblTest where name  包含于 'abcdefgh' 

不能用charIndex或者patIndex实现

39 个解决方案

#1


select * from tblTest where charindex(name ,'abcdefgh' )>0

#2


select * from tb where charindex('abcdefgh',name)>0
select * from tb where patindex('%abcdefgh%',name)>0

select * from tb where name like '%abcdefgh%'

#3


狙击啊..
人家说不能用charindex啊.

#4


引用 3 楼 liangCK 的回复:
狙击啊.. 
人家说不能用charindex啊.


那就like吧

#5


引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复:
狙击啊..  
人家说不能用charindex啊. 
 

那就like吧


like 也不能用吗?





select * from tb 
where replace('abcdefgh',name,'')< 8

#6


引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复: 
狙击啊..   
人家说不能用charindex啊.  
  

那就like吧 
 

like 也不能用吗? 


那 


select * from tb  
where replace('abcdefgh',name,'') < 8 


replace也不能用呢?

#7


引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复:
狙击啊..
人家说不能用charindex啊.


那就like吧


like 也不能用吗?





select * from tb
where replace('abcdefgh',name,'') < 8


高,这句没看懂

#8


引用 6 楼 liangCK 的回复:
引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复: 
引用 3 楼 liangCK 的回复:  
狙击啊..    
人家说不能用charindex啊.   
   

那就like吧  
  

like 也不能用吗?  


那  


select * from tb   
where replace('abcdefgh',name,'')  < 8  
 

replace也不能用呢?


容再下想想

#9


暂时想不到了

#10


各位帮忙啊

#11



楼上说过用
select * from tb    
where replace('abcdefgh',name,'')   < 8   

但是'abcdefgh'其实是个变量,不一定是8位,可能很多,请帮忙继续想想

#12



--这样?
--> 测试数据: @os
declare @os table (id int,name varchar(5))
insert into @os
select 1,'abcde' union all
select 2,'de' union all
select 3,'cde' union all
select 4,'abd' union all
select 5,'bcde' union all
select 6,'abe' union all
select 6,'xyz'

declare @name varchar(50)
set @name='abcdefghij'
select * from @os where len(replace(@name,name,''))<len(@name)

#13


引用楼主 crmserver 的帖子:
比如:name字段中有个abcd的值
select * from tblTest where name包含于'abcdefgh'

不能用charIndex或者patIndex实现


declare @str varchar(100)
set @str='abcdefgh'
select * from tblTest where @str like '%'+name+'%'
--> or
select * from tblTest where @str replace(@str,name,'')<>@str

#14


declare @str varchar(100)
set @str='abcdefgh'
select * from tblTest where @str like '%'+name+'%'
--> 笔误:
select * from tblTest where replace(@str,name,'')<>@str

#15


14楼的方法在SQL Server可以运行,但是在Access数据库中不能用declare声明变量怎么办?

#16


个人感觉like是最好用的

#17


16楼的,你说用like好用,如何实现啊?

#18


select * from tblTest where name like '%abcdefgh%'

#19


不是这样的,我要用实现这样的查询:

select * from tblTest where name 包含于 'abcdefgh'  

解释一下,name中的值只是'abcdefgh' 中的一部分,也就是查询少的字符串是否包含在多的字符串中,这种查询,跟我们平常的查询相反.

#20


引用 19 楼 crmserver 的回复:
不是这样的,我要用实现这样的查询: 

select * from tblTest where name 包含于 'abcdefgh'   

解释一下,name中的值只是'abcdefgh' 中的一部分,也就是查询少的字符串是否包含在多的字符串中,这种查询,跟我们平常的查询相反. 

12楼的不就是这意思么?

#21


撒点水水...别介意...

#22


学习了



 replace(@str,name,'')<>@str

len(replace(@name,name,''))<len(@name)


好想法

#23


这样:
select * from tblTest where 'abcdefgh' like '%'+name+'%'

#24


select * from tblTest where name like '*abcd*'  

#25


 
应该是select * from tblTest where name like '%abcd%'吧  
新手,不知道这是不是一样的

#26


引用 22 楼 GDC_ZhaoYZ0304360 的回复:
学习了 

牛 

 replace(@str,name,'') <>@str 

len(replace(@name,name,'')) <len(@name) 


好想法 


很强大,学习了

#27


select name from tab where replace(name,'abcd','')<>name 通杀...

#28


楼主应该用的不是MS SQL,MS SQL 的这些函数都用不上,只能用like
只有23楼的可以了。

#29


同意7楼的观点

#30


顶一下23楼的 oracle下 测试通过

#31


select * from tblTest where 'abcdefgh' like '%'+name+'%'

不错,顶!

#32




Select * from tblTest where name like 'abcdefgh'

#33



Select * from tblTest where name like '%abcdefgh%'

#34


sql或者access有没有这样的语法?
select * from tblTest where  'abcdefgh' like name ??????????
呵呵

#35


哎,access里面就是不能实现

#36


like

#37


select * from tblTest where 'abcdefgh' like '%'+name+'%'

这个在Access里面不能用

#38


access:
select * from tblTest where 'abcdefgh' like '*'+name+'*' 

#39


oracle里面如何用?不许用like

#1


select * from tblTest where charindex(name ,'abcdefgh' )>0

#2


select * from tb where charindex('abcdefgh',name)>0
select * from tb where patindex('%abcdefgh%',name)>0

select * from tb where name like '%abcdefgh%'

#3


狙击啊..
人家说不能用charindex啊.

#4


引用 3 楼 liangCK 的回复:
狙击啊.. 
人家说不能用charindex啊.


那就like吧

#5


引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复:
狙击啊..  
人家说不能用charindex啊. 
 

那就like吧


like 也不能用吗?





select * from tb 
where replace('abcdefgh',name,'')< 8

#6


引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复: 
狙击啊..   
人家说不能用charindex啊.  
  

那就like吧 
 

like 也不能用吗? 


那 


select * from tb  
where replace('abcdefgh',name,'') < 8 


replace也不能用呢?

#7


引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复:
引用 3 楼 liangCK 的回复:
狙击啊..
人家说不能用charindex啊.


那就like吧


like 也不能用吗?





select * from tb
where replace('abcdefgh',name,'') < 8


高,这句没看懂

#8


引用 6 楼 liangCK 的回复:
引用 5 楼 happyflystone 的回复:
引用 4 楼 happyflystone 的回复: 
引用 3 楼 liangCK 的回复:  
狙击啊..    
人家说不能用charindex啊.   
   

那就like吧  
  

like 也不能用吗?  


那  


select * from tb   
where replace('abcdefgh',name,'')  < 8  
 

replace也不能用呢?


容再下想想

#9


暂时想不到了

#10


各位帮忙啊

#11



楼上说过用
select * from tb    
where replace('abcdefgh',name,'')   < 8   

但是'abcdefgh'其实是个变量,不一定是8位,可能很多,请帮忙继续想想

#12



--这样?
--> 测试数据: @os
declare @os table (id int,name varchar(5))
insert into @os
select 1,'abcde' union all
select 2,'de' union all
select 3,'cde' union all
select 4,'abd' union all
select 5,'bcde' union all
select 6,'abe' union all
select 6,'xyz'

declare @name varchar(50)
set @name='abcdefghij'
select * from @os where len(replace(@name,name,''))<len(@name)

#13


引用楼主 crmserver 的帖子:
比如:name字段中有个abcd的值
select * from tblTest where name包含于'abcdefgh'

不能用charIndex或者patIndex实现


declare @str varchar(100)
set @str='abcdefgh'
select * from tblTest where @str like '%'+name+'%'
--> or
select * from tblTest where @str replace(@str,name,'')<>@str

#14


declare @str varchar(100)
set @str='abcdefgh'
select * from tblTest where @str like '%'+name+'%'
--> 笔误:
select * from tblTest where replace(@str,name,'')<>@str

#15


14楼的方法在SQL Server可以运行,但是在Access数据库中不能用declare声明变量怎么办?

#16


个人感觉like是最好用的

#17


16楼的,你说用like好用,如何实现啊?

#18


select * from tblTest where name like '%abcdefgh%'

#19


不是这样的,我要用实现这样的查询:

select * from tblTest where name 包含于 'abcdefgh'  

解释一下,name中的值只是'abcdefgh' 中的一部分,也就是查询少的字符串是否包含在多的字符串中,这种查询,跟我们平常的查询相反.

#20


引用 19 楼 crmserver 的回复:
不是这样的,我要用实现这样的查询: 

select * from tblTest where name 包含于 'abcdefgh'   

解释一下,name中的值只是'abcdefgh' 中的一部分,也就是查询少的字符串是否包含在多的字符串中,这种查询,跟我们平常的查询相反. 

12楼的不就是这意思么?

#21


撒点水水...别介意...

#22


学习了



 replace(@str,name,'')<>@str

len(replace(@name,name,''))<len(@name)


好想法

#23


这样:
select * from tblTest where 'abcdefgh' like '%'+name+'%'

#24


select * from tblTest where name like '*abcd*'  

#25


 
应该是select * from tblTest where name like '%abcd%'吧  
新手,不知道这是不是一样的

#26


引用 22 楼 GDC_ZhaoYZ0304360 的回复:
学习了 

牛 

 replace(@str,name,'') <>@str 

len(replace(@name,name,'')) <len(@name) 


好想法 


很强大,学习了

#27


select name from tab where replace(name,'abcd','')<>name 通杀...

#28


楼主应该用的不是MS SQL,MS SQL 的这些函数都用不上,只能用like
只有23楼的可以了。

#29


同意7楼的观点

#30


顶一下23楼的 oracle下 测试通过

#31


select * from tblTest where 'abcdefgh' like '%'+name+'%'

不错,顶!

#32




Select * from tblTest where name like 'abcdefgh'

#33



Select * from tblTest where name like '%abcdefgh%'

#34


sql或者access有没有这样的语法?
select * from tblTest where  'abcdefgh' like name ??????????
呵呵

#35


哎,access里面就是不能实现

#36


like

#37


select * from tblTest where 'abcdefgh' like '%'+name+'%'

这个在Access里面不能用

#38


access:
select * from tblTest where 'abcdefgh' like '*'+name+'*' 

#39


oracle里面如何用?不许用like