首页 > 解决方案 > SQL Server:连接值

问题描述

我有 3 列SPRTELE_PHONE_AREASPRTELE_PHONE_NUMBERSPRTELE_PHONE_EXT- 前缀,数字和分机。

我创建了一个案例,我只想显示SPRTELE_PHONE_NUMBERifSPRTELE_PHONE_AREASPRTELE_PHONE_EXTnull。否则,如果它们不为空,则输出将是带有括号和点的“(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

如果 prefix 为 null 而 ext 不为 null -> 1234567.890 反之亦然

标签: sqlsql-serverconcatenation

解决方案


您的查询缺少 2 种情况:
如果 prefix 为 null 且 ext 不为 null
如果 ext 为 null 且 prefix 不为 null

SELECT
  CASE
    WHEN SPRTELE_PHONE_AREA IS NULL AND SPRTELE_PHONE_EXT IS NULL THEN SPRTELE_PHONE_NUMBER
    WHEN SPRTELE_PHONE_AREA IS NULL THEN CONCAT(SPRTELE_PHONE_NUMBER, '.', SPRTELE_PHONE_EXT)
    WHEN SPRTELE_PHONE_EXT IS NULL THEN CONCAT('(', SPRTELE_PHONE_AREA, ')', SPRTELE_PHONE_NUMBER)
    ELSE CONCAT('(', SPRTELE_PHONE_AREA, ')', SPRTELE_PHONE_NUMBER, '.', SPRTELE_PHONE_EXT)
  END
FROM vcc.sprtele;

推荐阅读