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

MySQL中如何在SELECT语句拼接姓名?拼接返回0问题解决

解决SQL字符串拼接返回0的问题

嘿,这个坑我之前也踩过!你遇到的问题根源出在字符串拼接的运算符用错了,咱们来拆解下:

你原来的写法是concat(u.fname + ' ' + u.lname),这里的+在绝大多数SQL数据库里是算术加法运算符,不是字符串拼接用的。当数据库看到字符串和+号时,会尝试把字符串转换成数值类型,如果转换失败(比如名字是纯文本),就会默认转成0,最后几个0加起来自然全返回0了。

下面给你针对不同数据库的正确拼接方式:

1. MySQL/MariaDB 环境

直接用CONCAT函数,参数用逗号分隔(不需要+):

SELECT 
    t.test_id, 
    t.appt_date, 
    t.appt_time, 
    t.appt_site, 
    p.process_date, 
    p.pool_status, 
    t.test_status, 
    CONCAT(u.fname, ' ', u.lname) AS processed_by 
FROM .....

如果担心fname或lname为NULL导致整个拼接结果变成NULL,可以用CONCAT_WS(自动忽略NULL值,用指定分隔符拼接):

CONCAT_WS(' ', u.fname, u.lname) AS processed_by

2. SQL Server 环境

有两种常用方式:

  • 用+号拼接(但要确保字段都是字符串类型,且无NULL,否则结果会变成NULL):
SELECT 
    t.test_id, 
    t.appt_date, 
    t.appt_time, 
    t.appt_site, 
    p.process_date, 
    p.pool_status, 
    t.test_status, 
    u.fname + ' ' + u.lname AS processed_by 
FROM .....
  • 用CONCAT函数(自动处理NULL,把NULL当作空字符串):
SELECT 
    t.test_id, 
    t.appt_date, 
    t.appt_time, 
    t.appt_site, 
    p.process_date, 
    p.pool_status, 
    t.test_status, 
    CONCAT(u.fname, ' ', u.lname) AS processed_by 
FROM .....

3. PostgreSQL 环境

可以用||运算符,或者CONCAT函数:

-- 方式1:用||运算符
SELECT 
    t.test_id, 
    t.appt_date, 
    t.appt_time, 
    t.appt_site, 
    p.process_date, 
    p.pool_status, 
    t.test_status, 
    u.fname || ' ' || u.lname AS processed_by 
FROM .....

-- 方式2:用CONCAT函数
SELECT 
    t.test_id, 
    t.appt_date, 
    t.appt_time, 
    t.appt_site, 
    p.process_date, 
    p.pool_status, 
    t.test_status, 
    CONCAT(u.fname, ' ', u.lname) AS processed_by 
FROM .....

小提醒:如果你的业务场景中存在字段为NULL的情况,优先选CONCAT(三大主流数据库都支持)或CONCAT_WS(仅MySQL),能避免拼接结果意外变成NULL的问题。

内容的提问来源于stack exchange,提问作者Josh Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:23:09