`
ysen
  • 浏览: 122230 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

like 模糊查询

    博客分类:
  • sql
阅读更多

 sql 模糊查询

 

逗号,在sql中like中不需要转义,但是如果
在sql中的某个字段值用“,”分隔数据,
需要获取数据的时候直接把“,”拆分成数据,获得一个数据的list。

例如:需要查询某字段是否包含一个值,
111是否存在于1111,2111,1112,1121,1113这个字段中 。
因为根据“,”逗号分开,要求的答案是:不在字段中。

用传统的like '%111%',显然不合适,这样虽然111不存在但是依然能查到该条记录。
所以应该用以下语句实现:
select * from Table where ','+columA+',' like '%,111,%'。
实际就是把字段填上一个逗号然后在比较。如果你的字段是用别的分隔符,同理可得。

 

 

最近又遇到这样的问题:

 

一份合同流转中需要选择多个业务处理部门的code ,在合同表里有这个字段 BUSINESS_DEPT_ID

 

这个字段的数据存储是这样的 205000000;206000000;207000000;208000000;

 

在合同查询的时候需要匹配 选择的业务部门

使用下面语句 用的是DB2数据库

select c.BUSINESS_DEPT_ID from CMM_CONTRACT c  where c.BUSINESS_DEPT_ID||';' like '%206000000;%'

 

虽然违反了第三范式不过查询使用还是很方便的 如果因此再建张表的话那会很麻烦的

分享到:
评论
37 楼 miaow 2010-04-30  
在调试过类似的SQL之后,凡是自己做的表坚决不用这种表设计了。
宁愿用XML DB也不用这鬼扯的设计。
36 楼 bingufo 2010-04-30  
果真是一个很好的细节.,,,很细心啊.
35 楼 huanghyw 2010-04-30  
呵呵,不错,学习了
34 楼 murainwood 2010-04-30  
mreay 写道
这样走不了索引了。

白痴建模害死人啊~~~
33 楼 shuiguozheng 2010-04-29  
   这个帖子怎么又到首页了, 前几天上来的
32 楼 zjshan 2010-04-29  
不错哦,今天正好遇到类似的问题,先拿过来用了。
31 楼 mreay 2010-04-29  
这样走不了索引了。
30 楼 jxausea 2010-04-29  
<div class="quote_title">ysen 写道</div>
<div class="quote_div">
<p><a href="http://fuanyu.iteye.com/blog/605063"> sql 模糊查询</a></p>
<p> </p>
<p>逗号,在sql中like中不需要转义,但是如果<br>在sql中的某个字段值用“,”分隔数据,<br>需要获取数据的时候直接把“,”拆分成数据,获得一个数据的list。<br><br>例如:需要查询某字段是否包含一个值,<br>111是否存在于1111,2111,1112,1121,1113这个字段中 。<br>因为根据“,”逗号分开,要求的答案是:不在字段中。</p>
<p>用传统的like '%111%',显然不合适,这样虽然111不存在但是依然能查到该条记录。<br>所以应该用以下语句实现:<br>select * from Table where ','+columA+',' like '%,111,%'。<br>实际就是把字段填上一个逗号然后在比较。如果你的字段是用别的分隔符,同理可得。</p>
</div>
<p>like本身效率就比较低,应该尽量避免查询条件使用like;对于like
‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。</p>
<p>解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like
‘…%’,是会使用索引的;左模糊like</p>
<p>‘%...’无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like
‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。</p>
29 楼 qq274035206 2010-04-29  
妙!这个问题以前还没想过
28 楼 piliskys 2010-04-28  
二点,
1,低级问题,懂sql的谁都会注意
2,这问题常见,啥全表扫描啊,难道就这一字段过滤啊,
27 楼 cgs1999 2010-04-28  
ysen 写道
myy 写道
不错,考虑得很周到,不过这样效率比较低,记录数太多会很慢。

有什么更好的解决办法没啊?


可以考虑在保存时前后各增加一个逗号(,),模糊查询语句修改为
select * from Table where columA like '%,111,%'。
26 楼 hozaka 2010-04-28  
全表扫描,索引直接废了……谁还敢用?
25 楼 zheng19851 2010-04-28  
select * from auction where ',' || auction_name || ',' like '%,111,%';
24 楼 hanjiangit 2010-04-28  
xxjglobal 写道
不错,经测试 在sqlserver中没有问题
在oracle中应该为
select * from Table where ','||columA||',' like '%,111,%'

mysql 中也是这样。
23 楼 DoubleEO 2010-04-28  
数据库记录太多,一把就死了!
22 楼 抢街饭 2010-04-28  
只能当练习用!!一般开发很难遇到吧!!在说表设计不合理吧!!
21 楼 pipilu 2010-04-28  
topcode 写道
qingfengjushi1 写道
这样设计库表似乎不太合理, 第一范式都不满足。


难道所有的东西都一定要满足三范式吗.
特殊情况下需要取舍的吧


是,但这种情况下,确实有必要怀疑表设计是否合理了。
20 楼 qianlei007 2010-04-28  
一个字段,存多个数据!
    基本不用。
19 楼 llyzq 2010-04-28  
jspine 写道
JJiaBao 写道
select * from Table where ','+columA+',' like '%,111,%'
不太明白这句话的意思,columA应该是字段名吧,我前后加单引号会查询出结果吗?

','+columA+',' 这句的意图主要是为了使所有值前面都加上“,",如果你放入表中的值是以","开头,以","结尾,就不必加这句了!


最好是在维护表中值的时候就保证前后都有分隔符

不然用 ','+columA+',' like的话就不能用索引了

18 楼 llyzq 2010-04-28  
lyw985 写道
LZ的数据库是怎么存储的??
A:
column
1111,2111,1112,1121,1113
1141,211,111,121,11
.....

B:
column
1111
2111
1112
1121
1113

是A,还是B?


LZ用的是A

相关推荐

    PostgreSQL Like模糊查询优化方案

    本文将深入探讨如何在PostgreSQL中对LIKE模糊查询进行优化,提升数据检索速度。 首先,了解问题的本质是关键。在SQL中,LIKE '%xxx%'这样的查询意味着我们需要查找包含特定字符串"xxx"的所有记录,不论该字符串出现...

    SQL使用Like模糊查询

    在SQL(Structured Query Language)中,`LIKE` 模糊查询是一种非常实用的功能,它允许用户根据特定的模式匹配数据库中的数据。这个功能在数据检索、分析和处理时尤其有用,尤其是在我们不确定确切的搜索词或者需要...

    模糊查询的例子-最简单的VB查询入门

    在VB中实现模糊查询,通常会使用SQL语句,比如`LIKE`操作符配合通配符。例如,如果用户在表单的文本框中输入关键词,我们可以构建如下的SQL查询: ```sql SELECT * FROM 表名 WHERE 字段名 LIKE '%关键词%' ``` ...

    利用MyBatis进行不同条件的like模糊查询的方法

    MyBatis like模糊查询方法 MyBatis是一个流行的持久层框架,提供了强大的查询功能。其中,like模糊查询是最常用的查询方式之一。本文将介绍如何使用MyBatis进行不同条件的like模糊查询。 like模糊查询的原理 like...

    MySQL Like模糊查询速度太慢如何解决

    以下是一些关于如何优化MySQL LIKE模糊查询的策略: 1. **索引失效**: - 当使用`LIKE %keyword%`时,即查询模式中前后都有通配符,MySQL无法使用索引,因为这种模式需要全表扫描。即使表中有针对该字段的索引,也...

    thinkphp实现like模糊查询实例

    在数据查询方面,ThinkPHP支持多种查询方式,包括我们今天要讨论的重点——LIKE模糊查询。LIKE查询允许我们在数据库中搜索包含特定模式的数据,这对于实现搜索功能或过滤数据非常有用。 在ThinkPHP中,实现LIKE模糊...

    Laravel使用模型实现like模糊查询的例子

    // 使用like模糊查询 $posts = Post::where('title', 'like', '%' . $searchTerm . '%') -&gt;orWhere('content', 'like', '%' . $searchTerm . '%') -&gt;get() -&gt;toArray(); return $posts; } ``` 在上面的代码...

    ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法

    1. **ThinkPHP LIKE 模糊查询** LIKE 查询用于进行文本匹配,可以匹配包含特定字符的数据。例如,如果想查找用户名中包含"A"的所有用户,可以使用以下语句: ```php $data_like['username'] = array('like', '%A%...

    Mybatis自定义拦截器,对模糊查询传值的特殊字符统一进行转义处理的代码

    特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%*%)和半角模糊查询(%*或*%)

    SQL SERVER的模糊查询LIKE

     LIKE模糊查询的通配符  搜索通配符字符  在模糊查询中,我们需要查询包含通配符%, _之类的字符,比如我需要查询表名包含user_的表,我们可以用下面两种方法。  SELECT * FROM sysobjects WHERE xtype...

    python中数据库like模糊查询方式

    在这里,我们将深入探讨如何在Python中使用`LIKE`进行数据库的模糊查询。 首先,让我们明确`LIKE`操作符的基本用法。`LIKE`允许我们使用百分号(%)作为通配符,其中 `%` 可以代表任意数量的字符,包括零个字符。...

    Mybatis中的like模糊查询功能

    在Mybatis这个流行的持久层框架中,实现模糊查询功能,特别是`LIKE`操作,可以帮助开发者更灵活地处理数据过滤。本文将详细介绍Mybatis中使用`LIKE`进行模糊查询的几种方法。 1. **参数中直接加入`%`** 在Mybatis...

    MySql like模糊查询通配符使用详细介绍

    MySQL中的LIKE模糊查询是SQL查询语句中一种强大的匹配功能,它通过使用通配符来查找部分匹配的数据。本文将详细介绍两种主要的通配符——`%`和`_`,以及MySQL中的正则表达式匹配。 首先,我们来看`%`通配符。`%`...

    sqlite 支持中文模糊查询

    在描述中提到的问题是关于SQLite对中文模糊查询的支持。 在早期的一些SQLite版本中,由于编码或字符集处理的问题,可能会遇到在执行LIKE查询时,中文字符无法正确匹配的情况。LIKE操作符在SQL中用于执行模糊匹配,...

    Oracle中Like与Instr模糊查询性能大比拼

    在处理更大规模的数据(如2亿多条记录)时,使用`LIKE`进行模糊查询可能导致长时间等待,而`INSTR`可以在4分钟内完成,显示出优越的性能。此外,`INSTR`的一个特殊用法是,可以同时检查多个值是否存在,例如`instr('...

    sql模糊查询并按匹配度排序

    SQL中的模糊查询主要依赖于`LIKE`关键字来实现。`LIKE`允许使用通配符进行模式匹配,从而可以灵活地处理不完全确定的查询条件。常用的通配符包括: - `%`:表示任意数量的字符(包括零个字符)。 - `_`:表示单个...

    Mysql 时间模糊查询

    在MySQL中,模糊查询主要通过`LIKE`关键字实现。例如,查询所有包含“abc”的记录可以使用`SELECT * FROM table WHERE column LIKE '%abc%'`这样的语句。 #### 三、时间模糊查询的方法 ##### 1. Convert转成String...

    ASP.NET MVC数据库模糊查询

    `Contains`方法等价于SQL中的`LIKE '%value%'`,它可以处理任意位置的关键词匹配,且支持模糊查询。在Entity Framework中,`Contains`方法会被自动转换为对应的SQL语句,从而在数据库层面执行查询,提高了效率。 ...

Global site tag (gtag.js) - Google Analytics