在列中重复使用先前处理的值

时间:2018-02-14 00:18:40

标签: sql case reusability

我希望有人可以帮助我,因为我正在努力让它按预期工作。

在我的数据库中,我有不同格式的电话号码(即: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中转换的值。有办法吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以创建包含初始电话号码解析逻辑的FUNCTION,然后只需引用该功能两次。您的DBMS创建函数语法应该有一个子句,声明该函数为NOT VARIANT或DETERMINISTIC,因此无论您调用它多少次,它都可以每行运行一次。