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

SQL Server中如何将Float/INT转为Varchar并保留原始格式?

解决SQL Server转置并格式化数据的问题

核心思路

针对不同数据类型的列,采用条件格式化+UNION ALL转置的方式实现需求:

  • INT类型列直接转为无格式纯数字字符串
  • FLOAT类型列保留两位小数,自动识别并保留正负号

示例SQL代码

假设原始表名为OriginalTable,结构为var1 INT, var2 FLOAT, var3 FLOAT,执行以下语句即可得到目标格式:

SELECT 
    'a' AS Variable,
    CAST(var1 AS VARCHAR(50)) AS Value
FROM OriginalTable
UNION ALL
SELECT 
    'b' AS Variable,
    FORMAT(var2, 'N2', 'en-US') AS Value
FROM OriginalTable
UNION ALL
SELECT 
    'c' AS Variable,
    FORMAT(var3, 'N2', 'en-US') AS Value
FROM OriginalTable

关键细节说明

  • INT转字符串:CAST(var1 AS VARCHAR(50))直接输出无额外格式的纯数字(如77779999),避免多余符号或空格
  • FLOAT保留两位小数:FORMAT()函数的'N2'格式会自动保留两位小数,同时正确显示正负号(如-0.56、8.21),解决CAST直接转换时可能出现的科学计数法或多余小数位问题
  • 转置实现:通过UNION ALL将多列合并为单列,同时指定对应的变量标识(a/b/c)

低版本兼容方案(SQL Server 2012以下)

若你的SQL Server版本不支持FORMAT()函数,可改用STR()函数配合处理:

SELECT 
    'a' AS Variable,
    CAST(var1 AS VARCHAR(50)) AS Value
FROM OriginalTable
UNION ALL
SELECT 
    'b' AS Variable,
    LTRIM(STR(var2, 10, 2)) AS Value
FROM OriginalTable
UNION ALL
SELECT 
    'c' AS Variable,
    LTRIM(STR(var3, 10, 2)) AS Value
FROM OriginalTable
  • STR(var2, 10, 2)中,10为总长度(含正负号和小数),2为小数位数;LTRIM()用于去除STR默认生成的前导空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:47:16