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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:53