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

SQL如何计算员工无空格拼接姓名的总长度并按长度排序查询

实现需求的SQL编写方案

核心逻辑是通过字符串拼接函数合并姓名字段,再调用长度函数统计结果,最后按长度排序,以下是不同场景的实现:

标准通用写法(兼容多数主流数据库)

SELECT 
    emp_id 工号,
    first_name 名字,
    last_name 姓氏,
    CHAR_LENGTH(CONCAT(first_name, last_name)) AS 姓名总长度
FROM 
    employee
ORDER BY 
    姓名总长度;

函数说明

  • CONCAT(first_name, last_name):直接拼接两个字段,无额外空格,符合需求要求,是SQL标准函数,支持MySQL 5.1+、PostgreSQL 9.1+、SQL Server 2012+、Oracle 11g+等版本
  • 长度统计区分场景:
    • 若需统计字符个数(中文、英文每个字符均计1),使用CHAR_LENGTH,SQL Server中对应LEN函数
    • 若需统计字节数(UTF8编码下单个中文占3字节),使用LENGTH,SQL Server中对应DATALENGTH函数
  • 示例中的字段和表名请替换为你的实际业务表对应字段

不同数据库适配写法

  • SQL Server版本
SELECT 
    emp_id 工号,
    first_name 名字,
    last_name 姓氏,
    LEN(CONCAT(first_name, last_name)) AS 姓名总长度
FROM 
    employee
ORDER BY 
    姓名总长度;
  • Oracle版本
SELECT 
    emp_id 工号,
    first_name 名字,
    last_name 姓氏,
    LENGTH(first_name || last_name) AS 姓名总长度
FROM 
    employee
ORDER BY 
    姓名总长度;

边界场景兼容

如果名字或姓氏字段可能存在NULL值,拼接会返回NULL,可通过COALESCE函数将NULL转换为空字符串处理:

SELECT 
    emp_id 工号,
    first_name 名字,
    last_name 姓氏,
    CHAR_LENGTH(CONCAT(COALESCE(first_name,''), COALESCE(last_name,''))) AS 姓名总长度
FROM 
    employee
ORDER BY 
    姓名总长度;

如果需要按长度从大到小排序,在ORDER BY子句后加DESC即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:05