SQL数据库怎么实现模糊查询?

SQL数据库怎么实现模糊查询?,第1张

实现的方法和详细的 *** 作步骤如下:

1、第一步,按“Ctrl  + N”创建一个SQL查询,如下图所示,然后进入下一步。

2、其次,完成上述步骤后,可以使用[create database ....]关键字来进行创建,如下图所示,然后进入下一步。

3、接着,完成上述步骤后,输入新创建的数据库的名称,如下图所示,然后进入下一步。

4、然后,完成上述步骤后,可以单击以进行分析以查看是否存在错误,如下图所示,然后进入下一步。

5、随后,完成上述步骤后,单击立即执行,可以看到限制命令已经完成,如下图所示,然后进入下一步。

6、最后,完成上述步骤后,刷新数据库,可以看到可以查询新添加的[myDb]数据库,如下图所示。这样,问题就解决了。

MySql 使用 like关键字 进行模糊查询,like关键字 通常用在 where条件查询,like关键字 通常配合 %、_、[ ]、[^ ] 使用。

%表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

注意:只能查询连续的文字。【比如“深圳市福田区”可以查询,“深圳市区”查询不出来】

注意:此语句没有那么灵活,比较适用于固定的某个文字的查询。

注意:此语句比较灵活,可以查询相隔几个文字,比较实用。【比如“深圳市福田区小学”可以查询,“深圳市福区小”也可以查询】

表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

明确的告诉你。。。就这么直接检索不行。。。

大家不知道看明白没有:这是用确定数据检索不确定数据。。。不是你们说的用通配符能解决的事情。

数据检索的本质是用模式(就是不确定数据),检索符合模式的确定值。

确定性就是唯一性,而模式是不确定的。。。

我们输入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 ???。在现实中肯定不能,除非你在现实中有很强的业务规则对应。否则是很危险的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6936815.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存