SQL字串比对不正确

时间:2019-02-19 23:05:56

标签: sql sql-server

我正在尝试在同一列上搜索 exact 字符串的所有实例。

以下两行均返回相同的记录集。

select * from policy_templates where policy_content like '%[[Business Name]]%'
select * from policy_templates where policy_content like '%[[Business.Name]]%'

(区别是“公司”和“名称”之间的时间段。)


尽管查询返回了相同的结果集,但实际上没有记录包含[[Business Name]]。所有实例均为[[Business.Name]]


我已经运行了一个脚本,将[[Business Name]]的所有实例替换为[[Business.Name]]。该SQL按预期运行,并正确替换了所有实例。但是,鉴于上述问题,如果它检测到[Business.Name]]并将其替换为[[Business.Name],这显然是不必要的,我不会感到惊讶。

我已经在大约50行的较小数据集上进行了测试,然后再迁移到更大得多的数据集(在生产环境中)。目标列包含大量文本,因此我想使此匹配与[[Business.Name]]完全一致,因为当前与[[Business Name]]模棱两可。

1 个答案:

答案 0 :(得分:1)

'%[[]]%'用于正则表达式,.表示任何字符。结果'%[[Business Name]]%'等效于Regex中的[Business Name]Here is关于该问题的小型演示

因此,您需要转义[],因为它们是LIKE的特殊字符

WHERE POLICY_CONTENT LIKE '%\[\[Business Name\]\]% ESCAPE '\'