数据库的模糊查询

数据库中存有字符串a?c。要求:查询时输入abc,adc,a1c,a2c....等等的字符也可以把a?c检索出来。也就是?可以表示任意字符。请各位赐教。... 数据库中存有字符串a?c。要求:查询时输入abc,adc,a1c,a2c....等等的字符也可以把a?c检索出来。也就是?可以表示任意字符。请各位赐教。 展开
 我来答
山川肉包叔
2019-07-25 · TA获得超过3813个赞
知道大有可为答主
回答量:3014
采纳率:30%
帮助的人:240万
展开全部
明确的告诉你。。。就这么直接检索不行。。。
大家不知道看明白没有:这是用确定数据检索不确定数据。。。不是你们说的用通配符能解决的事情。
数据检索的本质是用模式(就是不确定数据),检索符合模式的确定值。
确定性就是唯一性,而模式是不确定的。。。
我们输入IG84317183的时候,这是个确定值,是唯一的。而这个唯一值可能属于的模式是无穷的或者是数量非常巨大的
从数学上来说,怎么可能用确定值用检索不确定值?
就像你说的:可能是IG8?????,而这几个问号可能的组合就有10万。也可能是I?G8431???,或者其他。
所以很简单,唯一可行的方法是倒过来,用你数据库内的内容来匹配这个确定值。因为虽然模式是不确定的,但是你数据库内储存的是有限的确定的。
首先将你数据库内的占位符“?”,替换成通配符,如果“?”只可以代表一位数则替换为“_”或者“?”本身,如果一个“?”可以代表几个字符则替换为“%”或者是“*”。因为不知道你的库规不规范,如果是规范的不知道的位数都标识为IG8???????这种,长度也都一样的话,可能就不用替换,因为?本身就是通配符(表示一位的)。因为不知道你用的是SQL
SERVER,ORACLE还是其他的。
然后我们就可以用'IG84317183'

LIKE
你数据库里的带通配符的模式。
很简单的语句就是:
如果有表“纸币表”,字段名是“纸币号”,则:
替换为“%”的
select
*
from
纸币表
where
'IG84317183'
LIKE
REPLACE(纸币号,'?','%');
也可以替换为“_”的:
select
*
from
纸币表
where
'IG84317183'
LIKE
REPLACE(纸币号,'?','_');
如果不替换就直接:
select
*
from
纸币表
where
'IG84317183'
LIKE
纸币号;
注意LIKE的两边跟我们平时用的是反的(一般来说是
字段
like
'某个值',现在是
'某个值'
like
字段,也就是说将字段中的值作为通配符表达式
)。就这样,很简单,很简单就能实现。只要你把道理想通。
但是,请你注意:这样检索出来的东西不能保证对应。还是那个道理,模式实际上是不确定的,虽然你可以数据库中检索出来,你就能说:
IG84???183这条数据是IG84317183
???。在现实中肯定不能,除非你在现实中有很强的业务规则对应。否则是很危险的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
壹寰(深圳)科技文化有限公司
2021-03-27 广告
要找正规专业的公司,行业口碑也比较重要。更多详尽准确的信息可以找壹寰(深圳)科技文化有限公司。91数据恢复是壹寰(深圳)科技文化有限公司旗下专业数据恢复品牌,91数据恢复专注于勒索病毒数据恢复、勒索病毒数据修复、数据库修复、数据库解密恢复、... 点击进入详情页
本回答由壹寰(深圳)科技文化有限公司提供
睛雅
2020-03-04
知道答主
回答量:75
采纳率:0%
帮助的人:4万
展开全部

数据库模糊查询

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式