• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 在SQL查询中使用LIKE来代替IN查询的方法

在SQL查询中使用LIKE来代替IN查询的方法

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了SQL查询,LIKE,IN等相关知识,希望本文的分享对您有所帮助

在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN,直接在IN后面给出ID的集合或是在IN后面跟一个子查询。

如下:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D','F2212304-51D4-42C9-AD35-5586A822258E')

可以看出直接在IN后面跟ID的集合需要将每一个ID都用单引号引起来。在实际应用中会遇到这么一种情况,在界面中收集的是一串GUID的拼接字符串,中间以逗号隔开,如果作为参数传到一个存储过程中执行,最终生成的语句会是下面这样:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E')

这样就不能查询到正确的结果。

一般情况下我们解决此问题的思路是将传入的字符串用一个split函数来处理,最终处理的结果是一张表,然后将这个表做自查询即可,如下:
代码如下:
DECLARE @IDs VARCHAR(4000)
SET @IDs='BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
DECLARE @temp TABLE(str VARCHAR(50))
INSERT INTO @temp
SELECT * FROM dbo.Split(@IDs,',')
SELECT * FROM Orders WHERE OrderGUID IN (SELECT str FROM @temp)

当然split函数系统比不提供,需要我们自己写:
代码如下:
CREATE FUNCTION Split
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @temp VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
IF @SourceSql<>''
INSERT @temp VALUES(@SourceSql)
RETURN
END

像这样做非常麻烦,而且还需要借助函数来实现,下面介绍一种简单的方法,因为GUID是唯一的,所以在上面的例子中可以使用LIKE来代替IN也可以达到同样的查询效果:
代码如下:
SELECT * FROM Orders
WHERE 'BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
LIKE '%'+convert(VARCHAR(40),OrderGUID)+'%'
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析如何加快mysql编译的速度
  • 基于mysql查询语句的使用详解
  • mysql 按照时间段来获取数据的方法
  • 有关mysql的一些小技巧
  • MySQL大表中重复字段的高效率查询方法
  • MYSQL速度慢的问题 记录数据库语句
  • 工作中常用的mysql语句分享 不用php也可以实现的效果
  • 彻底卸载MySQL的方法分享
  • mysql 查询第几行到第几行记录的语句
  • MySQL随机查询记录的效率测试分析

相关文章

  • 2018-12-05jdbc-JDBC使用反射读取properties文件出错
  • 2018-12-05浅谈 5.7.13 核心架构设计
  • 2018-12-05MySQL保存中文乱码的原因和解决办法
  • 2018-12-05Oracle Enterprise Linux 5.2安装Oracle 10g数据库
  • 2017-05-11Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别说明
  • 2018-12-05MySQL之——安装时出现APPLY security settings错误
  • 2018-12-05Mysql-索引数据排序
  • 2017-05-11MySQL中视图的使用及多表INNER JOIN的技巧分享
  • 2018-12-05php之MySQL数据库优化策略的详解
  • 2018-12-05解析Oracle 8i/9i的计划稳定性

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
    • MySQL的23个需要注意的地方
    • sql图形化操作设置级联更新和删除
    • mysql密码忘记的解决方法(图)
    • MYSQL WHERE语句优化
    • MYSQL建立外键失败几种情况记录Can't create table不能创建表
    • php中如何将图片储存在数据库里
    • 一个有趣的SQL命题 用一条语句切换BIT型的真假值
    • linux下mysql数据库单向同步配置方法分享
    • MSSQL根据ID进行分页实现方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有