sql-server - 将 SQL LIKE 运算符与 %% 一起使用

标签 sql-server pattern-matching sql-like

我需要在SQL Server中创建一个查询其中搜索条件将根据用户输入包含/排除表格。

假设我有两个表,TABLE_ATABLE_B,其中 TABLE_A 中包含 KEYCOLUMN_ACOLUMN_A 以及 TABLE_B 中的 FKCOLUMN_BCOLUMN_B 列。

查询如下:

SELECT TABLE_A.* FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%SEARCH2%'

现在,如果用户不输入SEARCH2,我就不需要搜索TABLE_B。但这意味着 IF ELSE 子句。而且,随着查询中“可选”表数量的增加,排列和组合也会增加,并且会出现许多 IFELSE 语句。

相反,我决定保留声明原样。因此,如果 SEARCH2 为空,查询将有效地变为:

SELECT * FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '% %'

SQL 优化器能否识别出 LIKE %% 与删除条件本身一样好?

最佳答案

在“B”表周围使用 OR,例如:

AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )

这样,如果字符串没有值,则其长度将为零,并且将评估 OR 的第一部分,始终返回 true 并将方程的该部分返回为有效并使用 LIKE 子句忽略另一半。

您可以根据需要对任意数量的链接表应用相同的方法。

关于sql-server - 将 SQL LIKE 运算符与 %% 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476737/

相关文章:

mysql - 就像运算符(operator)不工作一样,使用 spring mvc 和 hibernate

sql - 什么会导致单表超时

SQL Server 查询错误 'An object or column name is missing or empty'

sql - 当值基于另一列中的值时,如何将多个 SELECT 语句压缩为一个?

python - 选择名称遵循 pandas 中给定模式的 DataFrame 列

java - 我正在尝试学习正则表达式

sql - 在 Django 原始 sql 中使用 like 语句时出错

jquery - nodejs mssql 函数中的查询

algorithm - 具有通配符值的 Trie 实现

php - 将 LIKE 运算符与 % 一起用于 PDO 准备语句的关键字搜索