我的SQLServer表中有三种类型的电话号码,如下所示有人可以建议我如何执行以下情况的搜索操作。按10位数字搜索---029700456按范围内的10位数字搜索---0294005623
yx2lnoni1#
可以使用将所有数字转换为规范格式 translate() 以及 replace() . 根据规范格式,您可以定义范围的上限和下限,具体取决于手机的字符数是10个还是14个:
translate()
replace()
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
我建议你想办法修复数据模型。这是一个非常,非常,非常糟糕的方式来存储电话号码和电话号码范围。
1条答案
按热度按时间yx2lnoni1#
可以使用将所有数字转换为规范格式
translate()
以及replace()
. 根据规范格式,您可以定义范围的上限和下限,具体取决于手机的字符数是10个还是14个:那么你的条件是:
我建议你想办法修复数据模型。这是一个非常,非常,非常糟糕的方式来存储电话号码和电话号码范围。