SQL Server中分组拼接bigint字段避免科学计数法的技术问询
解决分组拼接bigint字段出现科学计数法的问题
这个问题我熟!之前帮同事解决过一模一样的情况——核心原因是你的EAN字段是bigint类型,在分组拼接时被隐式转换为数值类型,当数值达到一定位数后,数据库就会自动用科学计数法来显示。解决思路非常直接:先把bigint类型的EAN转换成字符串类型,再执行分组拼接操作。
下面针对几种主流数据库,给你提供具体的实现代码:
MySQL/MariaDB 解决方案
使用GROUP_CONCAT函数,先通过CAST将EAN转为字符串:
SELECT supplier_code, GROUP_CONCAT(CAST(EAN AS CHAR) SEPARATOR ' 和 ') AS ean_list FROM your_table_name -- 替换成你的表名 GROUP BY supplier_code;
SQL Server 解决方案
2017及以上版本(支持STRING_AGG)
直接用STRING_AGG,同时转换EAN为字符串:
SELECT supplier_code, STRING_AGG(CAST(EAN AS VARCHAR(20)), ' 和 ') AS ean_list FROM your_table_name -- 替换成你的表名 GROUP BY supplier_code;
旧版本SQL Server(用FOR XML PATH实现拼接)
如果你的SQL Server版本较低,不支持STRING_AGG,可以用FOR XML PATH的方式,同样要先转字符串:
SELECT supplier_code, STUFF(( SELECT ' 和 ' + CAST(EAN AS VARCHAR(20)) FROM your_table_name t2 WHERE t2.supplier_code = t1.supplier_code FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 3, '') AS ean_list FROM your_table_name t1 GROUP BY supplier_code;
PostgreSQL 解决方案
用STRING_AGG函数,通过::TEXT简写语法将EAN转为字符串:
SELECT supplier_code, STRING_AGG(EAN::TEXT, ' 和 ') AS ean_list FROM your_table_name -- 替换成你的表名 GROUP BY supplier_code;
额外注意点
- 转换字符串时,确保长度足够容纳bigint的最大数值(bigint最大为9223372036854775807,共20位),所以用
VARCHAR(20)或者TEXT类型都没问题。 - 如果需要更换拼接分隔符,直接替换代码里的
' 和 '即可。
内容的提问来源于stack exchange,提问作者D.Alex
相关产品推荐
相关产品推荐

