SQL查询字段被包含语句

前言

说到SQL的模糊查询,最先想到的,应该就是like关键字。

当我们需要查询包含某个特定字段的数据时,往往会使用 ‘%关键字%' 查询的方式。例如:

SELECT ... FROM 表名 WHERE 字段名 LIKE '%关键字%'

这应该可以算是一种典型的”包含XXX”的方式,但如果我们需要查询字段被包含于特定字符的数据时呢?

比如,我有一张联系人数据表ConnectName,其中有个字段用于记录姓名name。我想获取名为小兰和灰原的人的联系资料。正常情况下,我们首先能想到的做法应该是:

SELECT * FROM ConnectName WHERE name = '小兰' OR name = '灰原'

这样的做法是可以实现这种目的的。如果这时候,我突然想,再查一个人,比如说“柯南”,那么我们就要修改SQL的结构,添加一个Where条件句:

SELECT * FROM ConnectName WHERE name = '小兰' OR name = '灰原' OR name = '柯南'

我们知道,OR条件查询本身是属于效率较低的,而且结构变动的语句在MyBatis实现稍微麻烦些(当然也是可以实现的,遍历插入字段就行了)。

能不能简单一些呢?我可以把所有关键字放在一起,只用一个Where条件去实现吗?

CHARINDEX登场

这时候,我们就可以用 CHARINDEX 关键字了,CHARINDEX可以返回某个字段在一串文字中出现的位置,跟String的indexOf用法类似,不多废话,我们来举个栗子:

CHARINDEX('李白','曹操很帅') =0

在上面的栗子中,因为曹操很帅不包含李白关键字,所以找不到,返回0.

CHARINDEX('李白','李白很帅') =1

同样的栗子,因为包含里李白关键字,会返回关键字所在的开头第一个字的索引,所以返回1.

了解了使用方法之后,我们就可以运用CHARINDEX关键字优化下我们的SQL语句:

SELECT * FROM ConnectName WHERE CHARINDEX(name ,'小兰灰原柯南')>0

如果name字段对应的名字在 ‘小兰灰原柯南' 中出现,那么CHARINDEX函数就会返回大于1,就可以得到我们想要的数据啦(他们3个人也可以在一起愉快的玩耍咯^-^)

对应的mybatis实现也相对简洁

SELECT * FROM ConnectName WHERE <!--[CDATA[ AND CHARINDEX(name ,#{传入的参数}) --> 0 ]]>

如果后期我们想要加入一个新的人,比如毛利小五郎,只需要在传入的参数中加入 ‘小兰灰原柯南毛利小五郎' 就可以了,是不是简单了许多呢?

以上所述是小编给大家介绍的SQL字段的被包含查询语句,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

时间: 2024-11-13 09:03:43

SQL查询字段被包含语句的相关文章

sql查询字段中是否包含特定字符代码

update Survey_QuestionColumns set ColumnPath='1|3|1000|6' where  ColumnPath='1|3|4|6' CREATE FUNCTION  Spliaaaa ( @List nvarchar(2000),--要分隔的字符串 @SplitOn nvarchar(5),--分隔符 @num int ) RETURNS varchar(50) as BEGIN declare @aaa varchar(50) declare @RtnV

MySQL查询字符串中包含字符的记录

REGEXP 例1.查询字段中包含非英文的数据  代码如下 复制代码 SELECT * FROM `m_user` WHERE `emp_no` REGEXP '[^ -~]' =1 列2.这样能把所有不含英文的都搞出来  代码如下 复制代码 SELECT * FROM table WHERE name NOT REGEXP '[a-zA-Z0-9]+' 当然除了regexp之外还可以使用FIND_IN_SET,like来操作 FIND_IN_SET mysql中如何使用FIND_IN_SET(

sql-SQL查询字段有重复只取一条数据

问题描述 SQL查询字段有重复只取一条数据 sql查询数据,其中一个字段的数据有重复,重复的数据其他字段除创建时间外都相同,重复数据如何只显示最新的那条数据? 解决方案 select * from t where 时间 in ( select max(时间) from table group by 相同字段1,相同字段2,相同字段3,.... ) 思路 : 查询字段相同的数据(group by 或 distinct) 然后取出时间最新 (max 或者 时间升序)的数据, 将以上结果放在临时表 然

查询 关键词-hql语句如何查询字段包含关键词

问题描述 hql语句如何查询字段包含关键词 举个列子比如Topic实体,content字段是一个大文本.查询content 包含关键词(中国,台湾,香港)的记录.我想用下面这个语句.可是没有查到这种用法.是只能用like吗?我看到网上有人说like有效率问题.该如何正确处理这种问题呢?FROM Topic t WHERE t.content contains(中国,台湾,香港) 解决方案 如果没有全文索引,只能contain 解决方案二: SQL语句查询字段中是否包含汉字

SQL查询语句中的bool类型字段值的写法

  SQL查询语句中的bool类型字段值的写法 没有系统地看过SQL语句的写法说明,只是看了一些常用SQL语句的例子.今天写了条select * from table where sex='true',老是提示标准数据类型不匹配(我用的Access),检查了半天,原来sex字段作为bool(是/否)类型,在SQL语句中其值不需要用''引起来.

sql查询语句,在一个表里查询同时包含两行数据的ID

问题描述 sql查询语句,在一个表里查询同时包含两行数据的ID select * from traintime where '成都' IN (select * from traintime where Station ='重庆') 这句话要怎么写啊!我的数据库结构是(所有的列车时刻表都在一个表里) id 站台 里程 c226 成都 0 c226 重庆 100 k51 成都 0 k51 重庆 100 k51 武汉 300 ... 怎样才能查询经过这两个站的所有列车信息 解决方案 select a.

mysql查询字段中带空格的值的sql语句

  (1)mysql replace 函数 语法:replace(object,search,replace) 意思:把object中出现search的全部替换为replace  代码如下     update `news` set `content`=replace(`content`,' ','');//清除news表中content字段中的空格 这样就可以直接用like查询了. (2)mysql trim 函数 语法:trim([{BOTH | LEADING | TRAILING} [r

sql查询语句中字段和要查询的内容都为变量的参数化写法

问题描述 DimcnAsNewSqlClient.SqlConnection(cnStr)DimsqlAsString="Select*From员工信息where"&PnodeText&"=@Node"Dimcmd=NewSqlClient.SqlCommand(sql,cn)DimdaAsNewSqlClient.SqlDataAdapter(cmd)'定义sqldataadapter并于sqlcommand连接Dimds=NewDataSet()

SQL查询语句对象化的实现(C#)

对象|语句   在开发数据库应用的过程难免会编写大量的SQL语句,其中大部份是查询语句:为不同情况编写查询语句是一件很烦琐的事件.用过hibernate或Nhibernate会了解到把SQL查询语句对象化后使用起非常方便和快捷:也大大减少在编写查询SQL语句所带来的错误等问题.        前段时间在编写一个数据处理类的时候同样遇到这个问题,经过一段时间思考和设计现实现了SQL查询语句对象化的功能:在这里我把自己小小的成果共享一下. 在讲解前先看几个例子(数据是SQLServer的Northw