关于mysql varchar类型转数字的几个坑

先贴最后获得的标准sql:

SELECT
  oott.*
FROM
  (SELECT
      CAST((ot.gb - ot.old_gb) * 1024 AS DECIMAL(12,2))  growth_mb,
    ot.*
  FROM
    (SELECT
      (SELECT
        prv.gb
      FROM
        erp_table_capacity prv
      WHERE 1 = 1 
        AND DATE(FROM_UNIXTIME(prv.dml_time)) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
        AND prv.unionid = t.unionid
         -- and prv.`table_name`='MLOG$_ENI_OLTP_ITEM_STAR'
        ) AS old_gb,
      t.*
    FROM
      erp_table_capacity t
    WHERE 1 = 1
       -- and t.`table_name`='MLOG$_ENI_OLTP_ITEM_STAR'
      AND DATE(FROM_UNIXTIME(t.dml_time)) = CURDATE()) ot) oott
WHERE 1=1 
    AND  oott.growth_mb   >= 100.0
ORDER BY oott.growth_mb DESC;

开始解答,学习并解决到的问题:

1. 实现类似 oracle的rownum的实现,表连接自己

2. 解决format将数字保留2位时会给数字加上千分位“,”的情况

---

对于问题1,直接参见贴出的sql,后续自己再不明白了再仔细研读。

问题2,先引用博客《https://blog.csdn.net/u011136197/article/details/78659340》言简意赅的说明:

format(param, 2) (不建议)

convert(param, decimal(12,2))(建议)

cast(param as decimal(12,2))(建议)

最后我用的是:cast(param as decimal(12,2)) 。早先用的是format ,有一组数字在执行查询的时候显示结果为:1,256.04 注意千分位有逗号,导致数据排序怎么都不对。后续改为了cast,结果正确。

坑,查之填之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值