我希望有人可以帮助我,因为我正在努力让它按预期工作。
在我的数据库中,我有不同格式的电话号码(即:15551234,5551234,+ 15551234)。 所以我使用以下CASE来清理它并且效果很好:
CASE
LEFT(DC.PhoneNumber0,1)
WHEN '+' then replace(DC.PhoneNumber0,'+1','')
WHEN 1 then right(DC.PhoneNumber0,len(DC.PhoneNumber0)-1)
ELSE DC.PhoneNumber0
End 'Transformed Number',
现在返回“转换后的列”中需要处理的干净电话号码(5551234)
我现在想使用另一个CASE来检索这个已清理过的号码并提取区号以便将其翻译成可理解的值(即:201 =>美国 - 新泽西州)
所以我坚持写第二个CASE。 我试过这样的东西,但它不适用于我的数据库中已经干净的数字。
CASE
WHEN right(left(replace(DC.PhoneNumber0,'+',''),4),3) in (201, 1201) then 'US - New Jersey'
WHEN right(left(replace(DC.PhoneNumber0,'+',''),4),3) in (202, 1202) then 'US - Washington D.C.'
理想情况下,我想重用一下我刚刚在之前的CASE中转换的值。有办法吗?
提前感谢您的帮助。
答案 0 :(得分:0)
您可以创建包含初始电话号码解析逻辑的FUNCTION,然后只需引用该功能两次。您的DBMS创建函数语法应该有一个子句,声明该函数为NOT VARIANT或DETERMINISTIC,因此无论您调用它多少次,它都可以每行运行一次。