You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL根据多条件拼接不同列生成Nums字段实现方法

电话号码字段拼接查询方案

需求规则

需要从PhoneNumbers表查询时新增Nums列(待呼叫号码),取值逻辑:

  • 手机号MobileNum非空时,无论住宅号是否有值,优先取手机号拼接后缀MobileNum
  • 手机号为空、住宅号ResidenceNum非空时,取住宅号拼接后缀ResidenceNum
  • 两个号码都为空时,Nums返回NULL

测试环境初始化

先执行以下脚本完成建表和测试数据插入:

-- 建表
CREATE TABLE PhoneNumbers
(
    Id INT,
    Name VARCHAR(10),
    MobileNum VARCHAR(100),
    ResidenceNum VARCHAR(100)
)

-- 插入测试数据
INSERT INTO PhoneNumbers VALUES
(1,'Joey','9762575422',NULL),
(2,'Ross', '9987796244','8762575402'),
(3,'Chandler',NULL,'7645764689'),
(4,'Monica','8902567839','7825367901'),
(5,'Rachel',NULL,'7845637289'),
(6,'Pheobe','9872435789','9838653469'),
(7,'Gunther',NULL,NULL),
(8,'Mike',NULL,'9700103678')

实现代码

直接用CASE WHEN判断即可,逻辑直观,兼容MySQL、SQL Server、PostgreSQL等所有主流SQL环境:

SELECT 
    *,
    CASE
        WHEN MobileNum IS NOT NULL THEN CONCAT(MobileNum, 'MobileNum')
        WHEN ResidenceNum IS NOT NULL THEN CONCAT(ResidenceNum, 'ResidenceNum')
        ELSE NULL
    END AS Nums
FROM PhoneNumbers

如果偏好更简洁的写法,也可以结合COALESCE函数(返回参数列表中第一个非NULL值)实现,效果完全一致:

SELECT 
    *,
    CONCAT(
        COALESCE(MobileNum, ResidenceNum),
        CASE WHEN MobileNum IS NOT NULL THEN 'MobileNum' 
             WHEN ResidenceNum IS NOT NULL THEN 'ResidenceNum'
             ELSE NULL END
    ) AS Nums
FROM PhoneNumbers

返回结果说明

执行查询后,每条记录的Nums列值如下:

  • Joey:9762575422MobileNum
  • Ross:9987796244MobileNum
  • Chandler:7645764689ResidenceNum
  • Monica:8902567839MobileNum
  • Rachel:7845637289ResidenceNum
  • Pheobe:9872435789MobileNum
  • Gunther:NULL
  • Mike:9700103678ResidenceNum

内容的提问来源于stack exchange,提问作者Prabodh Purwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 19:06:21