【发布时间】:2018-12-13 19:53:29
【问题描述】:
我有 3 列 SPRTELE_PHONE_AREA、SPRTELE_PHONE_NUMBER 和 SPRTELE_PHONE_EXT - 前缀、数字和分机。
我创建了一个案例,如果 SPRTELE_PHONE_AREA 和 SPRTELE_PHONE_EXT 为空,我只想显示 SPRTELE_PHONE_NUMBER。否则,如果它们不为空,则输出将是带有括号和点的“(prefix)number.ext”。
这是我的代码:
SELECT
CASE
WHEN SPRTELE_PHONE_AREA IS NULL AND SPRTELE_PHONE_EXT IS NULL
THEN SPRTELE_PHONE_NUMBER
ELSE CONCAT('(', SPRTELE_PHONE_AREA, ')', SPRTELE_PHONE_NUMBER, '.', SPRTELE_PHONE_EXT)
END
FROM
vcc.sprtele;
问题是输出显示为每条记录的第二种情况:“CONCAT...”
问题出在哪里?
示例:前缀 = 650,数字 = 1234567,分机 = 890
- 如果前缀和分机为空 -> 1234567
- 如果前缀和分机不为空 -> (650)1234567.890
如果 prefix 为 null 而 ext 不为 null -> 1234567.890 反之亦然
【问题讨论】:
-
样本数据和期望的结果可以很好地传达您想要做的事情。
-
如果其中一个为NULL而另一个不是,你想做什么?
-
你确定它们是空的吗?也许他们只是空白?在这种情况下,
coalesce(SPRTELE_PHONE_AREA ,'') <> ''可能就是您想要的。 -
听起来你有三个按降序排列的选项,如果它们中的任何一个为空,请跳过它。 COALESCE 的绝佳机会(step1, step2, step 3, '')
标签: sql sql-server concatenation