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

来源:asp之家 时间:2011-09-30 11:10:18 


 代码如下:


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)+'%'

标签:SQL查询,LIKE,IN
0
投稿

猜你喜欢

  • 教你在SQL Server数据库中导入导出数据

    2008-12-09 14:42:00
  • MySQL删除外键、增加外键以及删除主键、增加主键的实战步骤

    2024-01-26 00:58:52
  • Python中lambda的用法及其与def的区别解析

    2021-09-22 13:59:03
  • Python 虚拟环境工作原理解析

    2023-02-21 02:18:50
  • Babylon使用麦克风并处理常见问题解决

    2024-04-29 13:25:53
  • windows环境下tensorflow安装过程详解

    2021-12-10 15:59:34
  • MySQL是如何实现主备同步

    2024-01-19 06:53:16
  • vue如何通过params和query传值(刷新不丢失)

    2024-05-09 15:17:23
  • Python一个简单的通信程序(客户端 服务器)

    2023-09-09 11:09:39
  • TensorFlow命名空间和TensorBoard图节点实例

    2022-01-15 04:52:23
  • SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法

    2024-01-13 05:42:28
  • mssql 指定字段编号sql语句

    2024-01-21 18:58:53
  • Centos 7 安装mysql5.7.24二进制 版本的方法及解决办法

    2024-01-21 22:18:58
  • Python+Tableau广东省人口普查可视化的实现

    2022-02-12 21:53:59
  • python 解压pkl文件的方法

    2022-01-11 02:41:55
  • Python K最近邻从原理到实现的方法

    2022-10-13 09:41:45
  • js原生map实现的方法总结

    2024-04-10 10:47:34
  • python开发之list操作实例分析

    2023-04-17 16:07:33
  • python必学知识之文件操作(建议收藏)

    2021-10-01 16:28:25
  • Python补齐字符串长度的实例

    2023-09-24 21:51:43
  • asp之家 网络编程 m.aspxhome.com