RT,现有某字段要用like来匹配,但由于内容不是固定的,总共要用到3次like才行,如何在1次like中就完成呢数据有类似
1.01.22
1.02.34
2.01.43
2.01.23
K10.01.23
N10.02.24
X10.01.23
X30.01.34
......现like语句如下
code like '1.01.%' or
code like '2.01.%' or
code like 'X30.01.%'其中后面的.01.是一样的,前面的1、2、X30是会多次出现的
能否像正则表达式那样进行多选匹配呢
1.01.22
1.02.34
2.01.43
2.01.23
K10.01.23
N10.02.24
X10.01.23
X30.01.34
......现like语句如下
code like '1.01.%' or
code like '2.01.%' or
code like 'X30.01.%'其中后面的.01.是一样的,前面的1、2、X30是会多次出现的
能否像正则表达式那样进行多选匹配呢
create table tb(ar varchar(10))
insert into tb
select 'a.c.' union all
select 'b.c.' union all
select 'd.c.'
goselect *
from tb
where ar like '[a,b].c%'drop table tb
/*********
ar
----------
a.c.
b.c.
---------------
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
------------------------------------------
单字符可以,X30是多个字符用[]匹配不了。
declare @t table (colname varchar(9))
insert into @t
select '1.01.22' union all
select '1.02.34' union all
select '2.01.43' union all
select '2.01.23' union all
select 'K10.01.23' union all
select 'N10.02.24' union all
select 'X10.01.23' union all
select 'X30.01.34'declare @m table(colname varchar(10))
insert into @m
select '1' union all
select '2' union all
select 'X30'select a.* from @t a
left join @m b on a.colname like b.colname+'.01.%'
where b.colname is not null
/*
colname
---------
1.01.22
2.01.43
2.01.23
X30.01.34
*/--如果你的字符串是'1,2,X30'这种
/*按照符号分割字符串*/
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
-- SET @c = substring(@c,charindex(' ',@c)+1,len(@c))
end
insert @t(col) values (@c)
return
end
/*测试
select * from dbo.m_split('1,2,3,4,5',',')
*/