sql-server - T-SQL 中具有可变数量搜索条件的 LIKE 运算符

标签 sql-server tsql sql-server-2008-r2 search-engine sql-like

有没有一种使用 AND 子句使用 LIKE 运算符查找多个匹配项的简便方法?

我应该动态地做,使用可变数量的术语。静态地获取它(使用固定数量的术语)是很容易的:

 SELECT *
 from MyTable
 WHERE MyColumn LIKE "%AAA%"
    AND MyColumn LIKE "%BBB%"
    AND MyColumn LIKE "%CCC%"

假设有一个包含未知数量术语的表变量:

DECLARE @Terms table
        (
        Term nvarchar(500)
        )

有没有办法在 MyColumn 上执行 LIKE 语句来匹配@Terms 中的所有项目?

最佳答案

DECLARE @Terms TABLE
(
    WildCards VARCHAR(20)
)

INSERT INTO @Terms
( WildCards )
VALUES
( 'CO' ),
( 'DO' ),
( 'EO' )

DECLARE @FoundAll INT
SELECT @FoundAll = Count(*) FROM @Terms

SELECT mt.MyColumn, COUNT(*), @FoundAll FROM MyTable mt
OUTER APPLY
(
    SELECT WildCards FROM @Terms
) d
WHERE mt.MyColumn LIKE ('%' + d.WildCards + '%')
GROUP BY mt.MyColumn
HAVING COUNT(*) = @FoundAll

这只会拉取匹配所有可能喜欢的记录。

关于sql-server - T-SQL 中具有可变数量搜索条件的 LIKE 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24510649/

相关文章:

sql - 更新和替换字符串的一部分

sql - 如何从大型分隔文件在SQL Server中创建多个表并为空间查询设置

sql-server - SQL Server,插入一行锁定整个表

sql - 如何在 SQL Server 2014 的 XML 根目录中添加 xmlns

sql-server - 如何使用 T-SQL 内置函数的值更新 XML 列?

sql - 如何在sql server中拆分字符串值

sql - 更新和插入存储过程

sql-server - 将 Sql Server DateTime 转换为 1970 年以来的毫秒数

sql - 基本 SQL SUM 和 JOIN

sql - 在 TSQL 错误消息之后获取文件中的行号