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函数
- 若需统计字符个数(中文、英文每个字符均计1),使用
- 示例中的字段和表名请替换为你的实际业务表对应字段
不同数据库适配写法
- 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
相关产品推荐
相关产品推荐

