sql - SQL Server:连接值
问题描述
我有 3 列SPRTELE_PHONE_AREA
,SPRTELE_PHONE_NUMBER
和SPRTELE_PHONE_EXT
- 前缀,数字和分机。
我创建了一个案例,我只想显示SPRTELE_PHONE_NUMBER
ifSPRTELE_PHONE_AREA
和SPRTELE_PHONE_EXT
null。否则,如果它们不为空,则输出将是带有括号和点的“(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 反之亦然
解决方案
您的查询缺少 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;
推荐阅读
- python - Windows 10 上的 SMTP.starttls() TimeoutError
- python - 使用 svgpathtools 和 numpy 找到 SVG 路径的切线水平的点
- sql - 使用分隔符分隔 (*) 所有列
- android - 试图模拟 LocationManager
- html - 如何管理图像的双重透明度
- c++ - 如何在 boost 属性树中编写嵌套列表并将其转储为 json?
- excel - 根据 C 列中的值对单元格周围的粗边框进行条件格式设置
- javascript - 通过链接访问页面时,NextJS 视频不会在没有页面刷新的情况下加载
- php - mPdf 创建一个空白页
- arrays - 使用特定工作表名称的数组获取数据