select * from tablename where fieldname like '12__5%'配符 描述 示例
% 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。
_(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
% 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。
_(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
select * from tablename where fieldname like '1_3_5'
...把你的?换成下划线_
我得到了 12345 这个数据,我是不是这样
select * from tablename where fieldname like '12???','123??','1234?'
'12345','?23??','?234?','?2345','??34' ..................
太烦了! 另外,像这样的SQL语句,执行效率怎样? 本系统要求实时性很高!
where patindex('%12345',fieldname)>0 --- ksjkdj12345
where patindex('12345%',fieldname)>0 --- 12345kjkj
where fieldname = @value
@value中任何一位都可以位?号,当然至少保留一位
where fieldname like @value
@value中任何一位都可以位?号,当然至少保留一位如果是,则很简单。因为这样组合的结果可以简化为?????,只要长度相同就是。
说,“ 任何一位都可能为 ?号,当然至少保留一位 ”
本算法用于车牌的模糊查找,要求实时性高!
FROM tablename
where fieldname like 1____
or fieldname like _2___
or fieldname like __3__
or fieldname like ___4_
or fieldname like ____5
那直接写成
fieldname like '_7__5'
不就可以么?
不知道这样效率如何select * from tablename
where substring(fieldname,1,1) = substring(@value,1,1) or
substring(fieldname,2,1) = substring(@value,2,1) or ...不过注意数据类型转换
一个简单的想法:select fieldname
,count(*) as num ------这一行根据需要,可以不要
from
(
SELECT fieldname
FROM tablename
where fieldname like '1____'
union all
SELECT fieldname
FROM tablename
where fieldname like '_2___'
union all
SELECT fieldname
FROM tablename
where fieldname like '__3__'
union all
SELECT fieldname
FROM tablename
where fieldname like '___4_'
union all
SELECT fieldname
FROM tablename
where fieldname like '____5'
) as a
group by fieldname
order by count(*) desc,fieldname asc
/*登记信息*/
(
@value [nvarchar](5)
)
AS
SELECT fieldname FROM tablename where fieldname like @valueGO
create function fitcount(@str1 varchar(10),@str2 varchar(10))
returns int
begin
declare @ret int
select @ret=0
declare @i int
select @i=1
while @i<=len(@str1)
begin
if substring(@str2,@i,1)=substring(@str1,@i,1)
select @ret=@ret+1
select @i=@i+1
end
return @ret
end
然后就可以用:select *,dbo.fitcount('12010',name) from emp where dbo.fitcount('12010',name)>=1得到你想要的结果了。
根据目击者提供的车牌号码,可能为 '苏A 12345',也可能为
'苏A 12?45' ,'苏A 12??5' , '???45' , '??3??' ......,
因为他们提供的车牌号不全,所以其他位上补上?号,表示该位的存在。
然后再根据经过的车辆牌号跟数据库比较, 即 : 按位比较,除去某条记录中的 所有 “?”后,其他位上全部对应相同!
如库中有记录 '苏A 1??45','苏A ??945'时 ,则 来数据 '浙A 19945' 时,要将 '苏A 1??45','苏A ??945'两条记录都检索出来! 谢谢各位!
要是没理解错,数据库里存的是'苏A 12?45' ,'苏A 12??5' , '???45' , '??3??' 这样的。
然后根据输入的参数'浙A 19945' 来找出数据库里与这个匹配的记录,是吗?第一个字不同也是匹配啊?
是不是不管第一个字?用的上面的函数是可以的,比如:
select name, dbo.fitcount('A 19945',name) from emp
用我上面写的函数是可以的,比如:
select name, dbo.fitcount('A 19945',name) from emp
然后根据输入的参数'浙A 19945' 来找出数据库里与这个匹配的记录!
不管第一个字!!!
多谢 icevi(按钮工厂) ! 结贴后令外送你100分,请多关注!
select *,dbo.fitcount('12010',name) from emp where dbo.fitcount('12010',name)>=1
order by dbo.fitcount('12010',name) desc
这样匹配度最高的放在最前面,容易定位。