怎样做数据库的模糊查询

怎样做数据库的模糊查询,第1张

select from 表 where 字段 like '%值%' --值的左右两边带%号,是模糊查询该字段所包含的数据

如果 like '值%',值右边带%号,是指模糊查询该字段从值到%所包含的数据

比如:查询姓名为姓李的记录,就是likt '李%',

如果 like '%李',值左边带%号,是指模糊查询该字段从%到值所包含的数据。

比如:查询名为林的记录,就是 like '%林'

使用sql语句查询数据,做模糊查询的方法是在要模糊掉的位置加上一个百分号%

比如:要查询id号是:83XX58193,只要满足前面是83,结尾是58193的所有记录的查询方法:

select from table_name where id like '83%58193';

意思就是查询表名为table_name下的id像 83XXX58193的所有记录。

CHARINDEX、RIGHT、LEFT重点说下charindex返回字符串中指定表达式的起始位置。 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数 expression1一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。expression2一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。start_location在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。返回类型 int注释 如果 expression1 或 expression2 之一属于 Unicode 数据类型(nvarchar 或 nchar)而另一个不属于,则将另一个转换为 Unicode 数据类型。如果 expression1 或 expression2 之一为 NULL 值,则当数据库兼容级别为 70 或更大时,CHARINDEX 返回 NULL 值。当数据库兼容级别为 65 或更小时,CHARINDEX 仅在 expression1 和 expression2 都为 NULL 时返回 NULL 值。 如果在 expression2 内没有找到 expression1,则 CHARINDEX 返回 0。

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

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

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

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

我们输入IG84317183的时候,这是个确定值,是唯一的。而这个唯一值可能属于的模式是无穷的或者是数量非常巨大的

从数学上来说,怎么可能用确定值用检索不确定值

就像你说的:可能是IG8,而这几个问号可能的组合就有10万。也可能是IG8431,或者其他。

所以很简单,唯一可行的方法是倒过来,用你数据库内的内容来匹配这个确定值。因为虽然模式是不确定的,但是你数据库内储存的是有限的确定的。

首先将你数据库内的占位符“”,替换成通配符,如果“”只可以代表一位数则替换为“_”或者“”本身,如果一个“”可以代表几个字符则替换为“%”或者是“”。因为不知道你的库规不规范,如果是规范的不知道的位数都标识为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

字段,也就是说将字段中的值作为通配符表达式

)。就这样,很简单,很简单就能实现。只要你把道理想通。

但是,请你注意:这样检索出来的东西不能保证对应。还是那个道理,模式实际上是不确定的,虽然你可以数据库中检索出来,你就能说:

IG84183这条数据是IG84317183

。在现实中肯定不能,除非你在现实中有很强的业务规则对应。否则是很危险的。

使用"like"进行模糊查询,在access查询视图中要使用""做模糊匹配(sql中是"%")

在access数据库中调试用"",程序中要改过来用"%",否则是查询不到任何数据的

try

{

_strSql="";

if (dataGridView1RowsCount <= 1)

{

if (dataGridView1Rows[0]Cells[0]Value == null || dataGridView1Rows[0]Cells[1]Value == null || dataGridView1Rows[0]Cells[2]Value == null)

{

return;

}

else

{

string filed = GetArrayElement(Cxzd, dataGridView1Rows[0]Cells[0]ValueToString()Trim(), 1);

//string type = GetArrayElement(Cxzd, filed, 2);

string cs = Cxfs[dataGridView1Rows[0]Cells[1]ValueToString()Trim()]ToString();

string content = dataGridView1Rows[0]Cells[2]ValueToString();

if (cs == "like")

{

content = "'%" + content + "%'";

}

_strSql = stringFormat("where {0} {1} {2} ", filed, cs, content);

}

}

sqlFormat("select from tb_user where 用户名 = '%s' or 用户名 like '%[%]s%' ",m_Find,m_Find);

或者

sqlFormat("select from tb_user where 用户名 = '%s' or 用户名 like '%[%s]%' ",m_Find,m_Find);

试试

以上就是关于怎样做数据库的模糊查询全部的内容,包括:怎样做数据库的模糊查询、微擎里面如何实现数据库的模糊查询、SQL中如何进行模糊查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9757891.html

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

发表评论

登录后才能评论

评论列表(0条)

保存