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
。在现实中肯定不能,除非你在现实中有很强的业务规则对应。否则是很危险的。
select id,name from table where name='李明';
select id,name from table where name like '李%';
上面的是等值查询,即查询姓名只叫叫李明的人的信息,
下面的是模糊查询,查询所有姓李的人的信息,包括李明,可能还会查出其他姓李的人的信息
以上就是关于SQL中如何进行模糊查询全部的内容,包括:SQL中如何进行模糊查询、数据库的模糊查询、数据库中什么是等值查询,什么是模糊查询,最好能举个例子,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)