【问题标题】:How to remove multiple possible prefixes from a Name string in SQL Server如何从 SQL Server 中的名称字符串中删除多个可能的前缀
【发布时间】:2020-04-08 10:28:15
【问题描述】:

我需要通过删除前缀来更正用户名,然后才能处理用户名。

例如,我的前缀列表是:

am, auf, auf dem, aus der, d, da, de, de l’, del, de la, de le, di, do, dos, du, 
im, la, le, mac, mc, mhac, mhíc, mhic giolla, mic, ni, ní, níc, o, ó, 
ua, ui, uí, van, van de, van den, van der, vom, von, von dem, von den, von der

如果存在,我想从名字中删除任何这些前缀。

例如 - 输入:

输出:

我知道我可以采用蛮力方法并进行 40 多次替换,但我想知道是否有更好/更智能的方法来执行此操作,因为需要处理的名称列表可能有几十个每天有数千人。

谢谢

【问题讨论】:

  • 如果想花时间实现SQL CLR,可以添加正则替换功能-stackoverflow.com/a/31693412/1080354
  • 如果您要删除的文本位于字符串的末尾,这是一个后缀而不是前缀

标签: sql sql-server azure-sql-server


【解决方案1】:

你可以使用apply:

select t.*, v.prefix_free_first_name
from t outer apply
     (select top (1) left(t.first_name, len(t.first_name) - len(v.prefix) - 1) as prefix_free_first_name
      from (values ('am'), ('auf'), . . .
           ) v(prefix)
      where t.first_name like '% ' + v.prefix
      order by len(v.prefix) desc
     ) v;

注意:这处理多个前缀匹配一个名称的情况,例如“de le”和“le”。

【讨论】:

  • 嗨,戈登,我正在尝试在一个函数中使用它,我可以通过传递“原始”名字并在不带前缀的情况下取回名字来应用于每一行。它不适合我。我显然没有正确使用应用程序。额外的帮助将不胜感激。谢谢。它不会让我在评论中粘贴我的功能,所以不知道如何向您展示
  • @user1372603 。 . .这回答了您在这里提出的问题。如果您对 UDF 有疑问,则应将其作为 问题提出。
  • K,我会在允许的时候发布另一个问题。关于你的答案。这是正确的v(前缀)。应该是 v.prefix 吗?
  • @user1372603 。 . .在values 语句之后,这是正确的语法。
  • 这似乎不起作用。我尝试将 t.first_name 替换为文本“am john”,并将 t 替换为客户端表,即客户端 t。我只是收到一个错误
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 2011-05-08
  • 2016-12-30
  • 2019-05-30
  • 1970-01-01
  • 2021-07-18
  • 2020-01-08
  • 2023-04-05
相关资源
最近更新 更多