代码之家  ›  专栏  ›  技术社区  ›  Cee McSharpface

如何在LIKE查询中忽略零宽度空格字符,或者如何处理?

  •  2
  • Cee McSharpface  · 技术社区  · 6 年前

    德语有时使用长度荒谬的词。只要它们在运行时是常量,这不是问题,谨慎的设计人员只会在语法规则允许的地方应用自动换行。现在我们有了一个应用程序,在运行时标签是用户可配置的。我知道这是一个坏主意的10个好理由,可能的解决方案不需要解决这个问题,这是一个业务需求。

    我们编写了一个翻译工具,它基于一个SQL Server数据库,在该数据库中,UX团队和翻译人员都可以通过部分令牌匹配来查找字符串,实现方法简单如下

    SELECT Literal FROM Translations WHERE LCID=N'de' AND Literal LIKE N'%'+@token+N'%'
    

    我知道这是不可分析的,目前它的性能相当好,所以一个可能的解决方案不需要解决这个问题。

    翻译人员已经养成了包括 zero-width spaces “”作为这样文本中的断字点:

    entgeltfortzahlungsanspruch公司

    实际上,您可以复制和粘贴该字符串中的空格,其中有两个,一个在“entgelt”之后,一个在“anspruch”之前。

    在运行时,这就像一个魅力。在设计时,现在不可能复制+粘贴“entgeltfortzahlungsanspruch”(没有不可见的空格!)进入工具的搜索框并获取结果,因为 LIKE 运算符不忽略这些空格。这已经成为一个问题,因为团队成员不断地添加相同的字符串,认为它还没有包含在词汇表中。

    有没有 喜欢 语法杂耍,正则表达式魔术,或其他巧妙的算法,允许忽略搜索中的零宽度空间,仍然保留在数据中?

    以前的研究:从搜索“tsql”和“零宽度空间”时出现的四个问题中, this one 部分相关,我们实际上已经实现了它的一部分,因为应用程序已经可以处理重音敏感/不敏感。但我找不到任何信息暗示校勘或 TRIM 明会帮助解决这种内部空白。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Amadan    6 年前

    WHERE col LIKE '%foo%' WHERE REPLACE(col, '​', '') LIKE '%foo%'

    col 'Entgelt​fortzahlungs​anspruch' 'Entgeltfortzahlungsanspruch' TRIGGER INSERT UPDATE