`
ysen
  • 浏览: 125530 次
  • 性别: 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;%'

 

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

分享到:
评论
17 楼 kimmking 2010-04-28  
如jspine tx说的

如果111在开头或是结尾
这个like查不出来。


----------------

另:如果数据时有意义的值,比如其他表的id或是数值
建议使用关系表,每一个存为一条数据,这样就不必like,
而且数据量大可以考虑建立索引
16 楼 murainwood 2010-04-28  
不满足第一范式么?
15 楼 xxjglobal 2010-04-28  
不错,经测试 在sqlserver中没有问题
在oracle中应该为
select * from Table where ','||columA||',' like '%,111,%'
14 楼 putonyuer 2010-04-28  
mei kan dong
13 楼 llfzy 2010-04-28  
呵呵。。有时候还真没注意到这些!
12 楼 jspine 2010-04-28  
JJiaBao 写道
select * from Table where ','+columA+',' like '%,111,%'
不太明白这句话的意思,columA应该是字段名吧,我前后加单引号会查询出结果吗?

','+columA+',' 这句的意图主要是为了使所有值前面都加上“,",如果你放入表中的值是以","开头,以","结尾,就不必加这句了!
11 楼 topcode 2010-04-28  
qingfengjushi1 写道
这样设计库表似乎不太合理, 第一范式都不满足。


难道所有的东西都一定要满足三范式吗.
特殊情况下需要取舍的吧
10 楼 lyw985 2010-04-28  
LZ的数据库是怎么存储的??
A:
column
1111,2111,1112,1121,1113
1141,211,111,121,11
.....

B:
column
1111
2111
1112
1121
1113

是A,还是B?
9 楼 xiangkun 2010-04-28  
在oracle中不能用? 还是我看错了?
8 楼 shuiguozheng 2010-04-28  
现在才明白什么是细节,像我的话,就直接like!
7 楼 qingfengjushi1 2010-04-27  
这样设计库表似乎不太合理, 第一范式都不满足。
6 楼 JJiaBao 2010-04-27  
select * from Table where ','+columA+',' like '%,111,%'
不太明白这句话的意思,columA应该是字段名吧,我前后加单引号会查询出结果吗?
5 楼 ysen 2010-04-27  
myy 写道
不错,考虑得很周到,不过这样效率比较低,记录数太多会很慢。

有什么更好的解决办法没啊?
4 楼 myy 2010-04-27  
不错,考虑得很周到,不过这样效率比较低,记录数太多会很慢。
3 楼 whaosoft 2010-04-27  
这种细节挺烦人的 lz做的不错
2 楼 moses3017 2010-04-27  
嗯,楼主总结的不错,学习了
1 楼 Javac_MyLife 2010-04-27  
学习了,这种小细节真的容易忽视呢,谢谢LZ。。

相关推荐

    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 . '%') ->orWhere('content', 'like', '%' . $searchTerm . '%') ->get() ->toArray(); return $posts; } ``` 在上面的代码...

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

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

    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...

    MyBatis-plus 模糊查询的使用

    - **模糊查询方法一** 使用`EntityWrapper`配合`like`方法,构建了一个OR条件的模糊查询。例如,查询名字中包含"海"的用户,无论是在`firstname`还是`lastname`字段: ```java List<UserInfo> userInfos = ...

    ASP.NET MVC数据库模糊查询

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

Global site tag (gtag.js) - Google Analytics