【发布时间】:2021-12-23 04:22:05
【问题描述】:
我正在 SQL Server 中编写一个查询,其中我试图根据多个“模糊匹配”标准生成一个数据指示器。一些示例代码来说明此任务:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') AND
COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%'
THEN 'Y' ELSE NULL END
但是,当此代码运行时,该标志被分配给所有行,而实际上应该只标记 COLUMN_2 与模式不匹配的行。
我尝试使用括号作为补救措施,如下例所示,但失败了:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') AND
(COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%')
THEN 'Y' ELSE NULL END
我也尝试嵌套 Case 语句,也失败了:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') THEN
CASE WHEN COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%'
THEN 'Y' ELSE NULL END
所以,写得直白,目标是“当 [COLUMN_1] 具有 'X' 值并且 [COLUMN_2] 中的值与此可能模式列表不匹配时,然后为记录分配一个标志 'Y '"。
这在 SQL Server 中可行吗?我也会重视您可能提供的任何其他相关专业知识/见解。提前致以诚挚的感谢!
【问题讨论】:
标签: sql sql-server string-matching case-statement