like 中 带有 % ,如何达到精确匹配

yyoinge 2013-06-27 04:58:43

create table ta(id int, bm varchar(30))
go

insert into ta select 1, '01'
insert into ta select 1, '01212'
insert into ta select 1, '013343'
insert into ta select 1, '01212333'

--下面语句中除了“自定义录入的值”以外,其他都是固定的,无法改变的。
select * from ta where bm like '自定义录入的值%'
--只在“自定义录入的值”上做文章,可否使上述语句检索出如下内容:

id bm
----------- ------------------------------
1 01

(所影响的行数为 1 行)
...全文
859 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
石硕页 2014-04-10
  • 打赏
  • 举报
回复
like 不就是模糊查询么
hackervip1988 2013-07-09
  • 打赏
  • 举报
回复
没看懂 什么意思 理解起来费劲
小路子的宝 2013-07-09
  • 打赏
  • 举报
回复
like %XX%;
lzw_0736 2013-07-01
  • 打赏
  • 举报
回复
引用 14 楼 yyoinge 的回复:
[quote=引用 12 楼 lzw_0736 的回复:] 相信以下就是楼主想要的答案: select * from ta where bm like '01[^_]%'
这样检索结果刚好和我想要的相反了[/quote] 這樣取出來的結果只有一條記錄(bm='01'),不正是你想要的結果嗎?
yyoinge 2013-07-01
  • 打赏
  • 举报
回复
引用 11 楼 sz_haitao 的回复:
猜测楼主的意思是:sql框架是固定了,如何在 自定义录入里做文章? 好像只能通过sql注入了 自定义录入的值===肯定匹配失败%' or bm='真正的录入值' or bm like '肯定匹配失败
就是这个意思
yyoinge 2013-07-01
  • 打赏
  • 举报
回复
引用 12 楼 lzw_0736 的回复:
相信以下就是楼主想要的答案: select * from ta where bm like '01[^_]%'
这样检索结果刚好和我想要的相反了
yyoinge 2013-07-01
  • 打赏
  • 举报
回复
引用 8 楼 roy_88 的回复:
这样?
--模糊
declare @Paramenter nvarchar(20)
set @Paramenter='01'
select * from ta where bm like @Paramenter+'%'
go
--精准
declare @Paramenter nvarchar(20)
set @Paramenter='01[^0-9]'
select * from ta where bm like @Paramenter+'%'
这样检索没有返回任何匹配的数据
haitao 2013-06-28
  • 打赏
  • 举报
回复
猜测楼主的意思是:sql框架是固定了,如何在 自定义录入里做文章? 好像只能通过sql注入了 自定义录入的值===肯定匹配失败%' or bm='真正的录入值' or bm like '肯定匹配失败
---涛声依旧--- 2013-06-28
  • 打赏
  • 举报
回复
select * from ta where CHARINDEX(bm,'自定义录入的值')>0
lzw_0736 2013-06-28
  • 打赏
  • 举报
回复
相信以下就是楼主想要的答案: select * from ta where bm like '01[^_]%'
中国风 2013-06-27
  • 打赏
  • 举报
回复
用正则的方式排除字符 这样的写法效率不高,如果是实际应用,我在自定义字符串第1个字符作为判断类型是否为精准
中国风 2013-06-27
  • 打赏
  • 举报
回复
这样?
--模糊
declare @Paramenter nvarchar(20)
set @Paramenter='01'
select * from ta where bm like @Paramenter+'%'
go
--精准
declare @Paramenter nvarchar(20)
set @Paramenter='01[^0-9]'
select * from ta where bm like @Paramenter+'%'
KevinLiu 2013-06-27
  • 打赏
  • 举报
回复
同意楼上的可以用SUBSTRING获得,从第一位取的总长度-LEN(固定长度)就可以了。
reverzeng 2013-06-27
  • 打赏
  • 举报
回复
where substring(bm,1,len('自定义输入的值'))='自定义输入的值'
sych888 2013-06-27
  • 打赏
  • 举报
回复
精确查询推荐用 =
EnForGrass 2013-06-27
  • 打赏
  • 举报
回复
精确匹配还用like干嘛
叶子 2013-06-27
  • 打赏
  • 举报
回复
模糊的结果会有多条,可以根据匹配度得到最接近的一条。
叶子 2013-06-27
  • 打赏
  • 举报
回复

create table ta(id int, bm varchar(30))
go
insert into ta select 1, '01'
insert into ta select 1, '01212'
insert into ta select 1, '013343'
insert into ta select 1, '01212333'
 
DECLARE @p VARCHAR(20)
SET @p='01'
select TOP 1 * from ta where bm like @p+'%' ORDER BY LEN(bm)-LEN(@p)

--DROP TABLE ta
叶子 2013-06-27
  • 打赏
  • 举报
回复
like 就是模糊查询呀,如果要精确可以用等号。 如果一定要用like 而且要控制结果只能在结果中进行过滤。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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