SQL Server Like Query

时间:2018-04-10 08:26:25

标签: sql-server sql-like

如何使用like运算符搜索表格中的多个字段?

例如:

SELECT * 
FROM EMP 
WHERE ENAME LIKE ('%SCOTT%');

如果我想在单个查询中搜索多个列,例如'%SCOTT%''%ADAMS%'等,而不使用多个like子句,该怎么办?

1 个答案:

答案 0 :(得分:0)

作为变体))

SELECT e.*
FROM EMP e
JOIN (VALUES('SCOTT'),('ADAM')) k(Name) ON e.ENAME LIKE CONCAT('%',k.Name,'%')

如果您使用SQL Server 2016或更高版本,您也可以使用string_split

SELECT e.*
FROM EMP e
JOIN (SELECT value Name FROM string_split('SCOTT,ADAM',',')) k ON e.ENAME LIKE CONCAT('%',k.Name,'%')

如果在过程

中使用名称作为varchar参数,则第二种变体很好
CREATE PROC FindEmpByNames
  @Names varchar(200)
AS
    SELECT e.*
    FROM EMP e
    JOIN (SELECT value Name FROM string_split(@Names,',')) k ON e.ENAME LIKE CONCAT('%',k.Name,'%')
GO

测试

EXEC FindEmpByNames 'SCOTT,ADAM'

您还可以使用数据库表中的值

CREATE TABLE ParamNames(Name varchar(10))

INSERT ParamNames(Name)VALUES
('SCOTT'),
('ADAM')
-------------
SELECT e.*
FROM EMP e
JOIN ParamNames k ON e.ENAME LIKE CONCAT('%',k.Name,'%')