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

如何实现SQL查询保留两位小数,零值与NULL值无小数位?

问题原因分析

你的问题出在CASE表达式的类型自动统一上:当CASE的两个分支返回不同数据类型时(比如一个返回整数0,另一个返回decimal(10,2)),数据库会自动将低精度的整数类型转换为高精度的decimal类型,导致所有结果都被强制带上两位小数。

解决方案

要实现这种差异化的显示格式,需要将结果转换为字符串类型,通过格式化函数控制输出逻辑:

针对不同数据库的写法

1. SQL Server

使用FORMAT函数直接指定格式:

SELECT
  CASE
    WHEN COALESCE(number, 0) = 0 THEN '0'
    ELSE FORMAT(number, 'N2')
  END AS "My number"
FROM Mytable

FORMAT(number, 'N2')会为非零值自动保留两位小数,零值和NULL值则直接输出字符串'0'。

2. MySQL

可以用FORMAT函数,或者结合ROUND和字符串拼接:

-- 方法1:使用FORMAT函数
SELECT
  CASE
    WHEN COALESCE(number, 0) = 0 THEN '0'
    ELSE FORMAT(number, 2)
  END AS `My number`
FROM Mytable;

-- 方法2:ROUND+字符串拼接
SELECT
  CASE
    WHEN COALESCE(number, 0) = 0 THEN '0'
    ELSE CONCAT(ROUND(number, 2), '')
  END AS `My number`
FROM Mytable;

3. Oracle

使用TO_CHAR自定义格式模型:

SELECT
  CASE
    WHEN COALESCE(number, 0) = 0 THEN '0'
    ELSE TO_CHAR(number, '99999999.99')
  END AS "My number"
FROM Mytable;

注意:格式模型99999999.99需要根据你的数值范围调整,避免数值过大时输出#号。

补充说明

如果要求必须返回数值类型(而非字符串),这种差异化显示逻辑无法在SQL层面实现——因为数值类型本身不存储显示格式,所有格式化操作都需要在客户端(比如报表工具、应用程序)中完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:59:58