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

dev*_*yst 5 sql-server pattern-matching sql-like

我需要在SQL Server中创建一个查询,其中搜索条件将包括/排除基于用户输入的表.

说我有两个表,TABLE_ATABLE_B用列KEYCOLUMN_A,并COLUMN_ATABLE_A与列FKCOLUMN_BCOLUMN_BTABLE_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%'
Run Code Online (Sandbox Code Playgroud)

现在,如果用户没有输入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 '% %'
Run Code Online (Sandbox Code Playgroud)

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

DRa*_*app 10

缠绕OR"B"表,例如:

AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )
Run Code Online (Sandbox Code Playgroud)

这样,如果字符串没有值,它的长度将为零,并且OR将评估第一部分,则总是返回true,并将等式的该部分返回为有效,并使用该LIKE子句忽略另一半.

您可以根据需要为多个链接表应用相同的内容.