【问题标题】:Identify a record that contain the phone Number with different format识别包含不同格式电话号码的记录
【发布时间】:2020-11-28 13:10:51
【问题描述】:

我的 SQL Server 表中有以下三种电话号码

有人可以建议我如何针对以下场景执行搜索操作。

  1. 按 10 位数字搜索 --- 029700456
  2. 按范围内的 10 位数字搜索 --- 0294005623

【问题讨论】:

  • 使用 SQL Server 很难达到第二个要求。
  • 您能否详细说明第二种情况并提供给定输入的预期输出?
  • 我想在搜索范围内的电话号码时检索记录。例如搜索 0294005623 应该给我一行(+61)0294005622-5624
  • @Kidoo 谢谢!我认为戈登的回答很完美,对吧?

标签: sql sql-server search wildcard phone-number


【解决方案1】:

您可以使用translate()replace() 将所有数字转换为规范格式。根据规范格式,您可以定义范围的上限和下限,具体取决于电话是 10 个字符还是 14 个字符:

select t.*
from t cross apply
     (values (case when phone like '(+61)%'
                   then stuff(replace(translate(t.phone, '()+-', '    '), ' ', ''), 1, 2, '')
                   else replace(translate(t.phone, '()+-', '    '), ' ', '')
              end)
     ) v(canonical)
     (values (left(canonical, 10),
              (case when len(canonical) = 10 then canonical
                    else left(canonical, 6) + right(canonical, 4)
               end)
              )
     ) v2(phone_upper, phone_lower)

那么你的条件是:

where @phone between v2.phone_lower and v2.phone_upper

我建议您弄清楚如何修复数据模型。这是存储电话号码和电话号码范围的一种非常、非常、非常糟糕的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多