sql计算去除值后面的零

bidPrice 计算结果保留了太多小数位数。

推荐方案4(方案4:去掉末尾的零(保持小数,但去掉无意义的0))

方案1:使用 ROUND() 函数(推荐)

将计算结果四舍五入到指定小数位数:

sql 复制代码
select
    -- 基础项目信息(对应 SimilarProjectVO 核心字段)
    pwtpd.section_id AS sectionId,
    pwtpd.section_name AS projectName,  -- 项目名称(取标段名称)
    pwtpd.tower_in_total_price AS towerInTotalPrice, -- 塔筒报价
    pwtpd.project_price_contain_tower AS projectPriceContainTower, -- 项目报价包含塔筒
    pwtpd.project_price_not_tower AS projectPriceNotTower, -- 项目报价不包含塔筒
    pwtpd.win_bid_amount,
    -- 使用 ROUND 保留2位小数
    ROUND(
        (CAST(IFNULL(pwtpd.win_bid_amount, 0) AS DECIMAL(18, 0))
        / NULLIF(CAST(IFNULL(pwtpd.project_capacity, 0) AS DECIMAL(18, 0)) * 1000, 0)
        ), 2
    ) AS bidPrice,  -- 中标单价(保留2位小数)
    
    -- 其他字段保持不变
    bpi.purchase_type AS purchaseType, -- 是否框架采购
    CASE
    WHEN pwtpd.single_unit_capacity REGEXP '^[0-9.]+$'
    THEN CAST(pwtpd.single_unit_capacity AS DECIMAL(10,2))
    WHEN pwtpd.single_unit_capacity REGEXP '^[0-9.]+[~-][0-9.]+$'
    THEN (
    CAST(SUBSTRING_INDEX(pwtpd.single_unit_capacity, '~', 1) AS DECIMAL(10,2)) +
    CAST(SUBSTRING_INDEX(pwtpd.single_unit_capacity, '~', -1) AS DECIMAL(10,2))
    ) / 2
    ELSE NULL
    END AS singleUnitCapacityValue,
    CASE
    WHEN pwtpd.single_unit_capacity REGEXP '^[0-9.]+$'
    THEN CONCAT('单机', CAST(CAST(pwtpd.single_unit_capacity AS DECIMAL(10,2)) AS CHAR), 'MW')
    WHEN pwtpd.single_unit_capacity REGEXP '^[0-9.]+[~-][0-9.]+$'
    THEN CONCAT('单机', CAST( (
    CAST(SUBSTRING_INDEX(REPLACE(pwtpd.single_unit_capacity, '-', '~'), '~', 1) AS DECIMAL(10,2)) +
    CAST(SUBSTRING_INDEX(REPLACE(pwtpd.single_unit_capacity, '-', '~'), '~', -1) AS DECIMAL(10,2))
    ) / 2 AS CHAR), 'MW')
    ELSE NULL
    END AS singleUnitCapacity,
    CASE
    WHEN pwtpd.project_capacity REGEXP '^[0-9.]+$'
    THEN CAST(pwtpd.project_capacity AS DECIMAL(10,2))
    WHEN pwtpd.project_capacity REGEXP '^[0-9.]+[~-][0-9.]+$'
    THEN (
    CAST(SUBSTRING_INDEX(pwtpd.project_capacity, '~', 1) AS DECIMAL(10,2)) +
    CAST(SUBSTRING_INDEX(pwtpd.project_capacity, '~', -1) AS DECIMAL(10,2))
    ) / 2
    ELSE NULL
    END AS projectCapacityValue,
    pwtpd.tower_type as towerType,
    pwtpd.total_capacity_float_requirement as capacityFloatReq
from product_wind_turbine_detail_summary pwtpd
    left join bid_project_info bpi on pwtpd.section_id = bpi.section_id and pwtpd.company_id = bpi.company_id
where pwtpd.win_bid_status = 1 and pwtpd.company_id is not null and pwtpd.is_mixed_arrangement_allowed ='否'

方案2:使用 CAST() 指定小数位数

如果希望统一小数位数,可以使用 CAST()

sql 复制代码
-- 将 ROUND() 替换为 CAST()
CAST(
    (CAST(IFNULL(pwtpd.win_bid_amount, 0) AS DECIMAL(18, 0))
    / NULLIF(CAST(IFNULL(pwtpd.project_capacity, 0) AS DECIMAL(18, 0)) * 1000, 0)
    ) AS DECIMAL(18, 2)
) AS bidPrice,  -- 保留2位小数

方案3:完全去掉小数部分(只保留整数)

如果只需要整数:

sql 复制代码
-- 使用 FLOOR() 向下取整 或 ROUND(..., 0) 四舍五入取整
FLOOR(
    (CAST(IFNULL(pwtpd.win_bid_amount, 0) AS DECIMAL(18, 0))
    / NULLIF(CAST(IFNULL(pwtpd.project_capacity, 0) AS DECIMAL(18, 0)) * 1000, 0)
    )
) AS bidPrice,  -- 只保留整数部分(向下取整)

方案4:去掉末尾的零(保持小数,但去掉无意义的0)

使用 TRIM()CAST() 组合去掉末尾的零:

sql 复制代码
-- 保留小数,但去掉末尾的零
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM 
    CAST(
        (CAST(IFNULL(pwtpd.win_bid_amount, 0) AS DECIMAL(18, 0))
        / NULLIF(CAST(IFNULL(pwtpd.project_capacity, 0) AS DECIMAL(18, 0)) * 1000, 0)
        ) AS DECIMAL(18, 4)
    )
)) AS bidPrice,  -- 保留4位小数,去掉末尾的零
相关推荐
短剑重铸之日15 小时前
《7天学会Redis》Day 5 - Redis Cluster集群架构
数据库·redis·后端·缓存·架构·cluster
007php00715 小时前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
lkbhua莱克瓦2415 小时前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
老邓计算机毕设15 小时前
SSM心理健康系统84459(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·心理健康系统·在线咨询
碎像15 小时前
10分钟搞定 MySQL 通过Binlog 数据备份和恢复
数据库·mysql
+VX:Fegn089516 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
win x16 小时前
Redis 分布式锁
数据库·redis·分布式
2501_9445210016 小时前
rn_for_openharmony商城项目app实战-商品评价实现
javascript·数据库·react native·react.js·ecmascript·harmonyos
冉冰学姐16 小时前
SSM心理健康系统59q3n(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·心理健康系统·心理文章
heartbeat..16 小时前
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)
java·服务器·数据库·sql