sql—标识包含不同格式电话号码的记录

yacmzcpb  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(465)

我的SQLServer表中有三种类型的电话号码,如下所示

有人可以建议我如何执行以下情况的搜索操作。
按10位数字搜索---029700456
按范围内的10位数字搜索---0294005623

yx2lnoni

yx2lnoni1#

可以使用将所有数字转换为规范格式 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

我建议你想办法修复数据模型。这是一个非常,非常,非常糟糕的方式来存储电话号码和电话号码范围。

相关问题