0
点赞
收藏
分享

微信扫一扫

服务器处理HTTP

boomwu 2024-12-02 阅读 16

文章目录

1 使用场景

  • 现象:查询时,发现小数点后多了好几个 0,如:12.00,想得到的效果是 12
  • 原因:表字段使用 number(12, 2),保留了 2 位小数
  • 举例:示例 sql 语句如下
-- 创建测试表
create table test_table (
 sno  number, -- 序号
 num1 number(12, 2), -- 测试 number 类型
 var1 varchar2(30) -- 测试 varchar 类型
);

-- 插入测试数据
insert into test_table(sno, num1, var1) values(1, 12.34, '12.34');
insert into test_table(sno, num1, var1) values(2, 12.00, '12.00');
insert into test_table(sno, num1, var1) values(3, 12.05, '12.05');
insert into test_table(sno, num1, var1) values(4, 12, '12');
commit;

-- 查询数据
SELECT t.* FROM test_table t;
/*SNO	NUM1	VAR1
1	12.34	12.34
2	12.00	12.00
3	12.05	12.05
4	12.00	12*/

-- 删除表(若有需要)
-- drop table test_table;

2 解决办法

2.1 方法1:trim(trailing ‘0’ from 列名)

  • 操作对象:数值 类型的字段
# 格式:select trim(trailing '0' from 列名) from 表名;
select t.sno,
       trim(trailing '0' from t.num1) num1,  
       trim(trailing '0' from t.var1) var1 
  from test_table t;

/*
SNO	NUM1	VAR1
1	12.34	12.34
2	12		12.     → 对于字符字段,会出现 ".0"
3	12.05	12.05
4	12		12
*/

2.2 方法2:to_char(列名, ‘FM999990.099’)

  • FM:固定格式
  • 9:表示数值 1 ~ 9,其中
    • 9 的个数代表数值的位数,如:999.99 表示 整数位有 3 个,小数位有 2
    • 9 表示的数值位数可大于实际的数值位数,如下查询sql
  • 0:表示数值 0,避免出现 "xx."、".xx" 这种情况
select t.sno,
       to_char(t.num1, 'FM999990.099') num1,  
       to_char(t.var1, 'FM999990.099') var1,
       -- 若想去掉 12. 中的 .
       trim(trailing '.' from to_char(t.num1, 'FM999990.999')) num2
  from test_table t

/*
SNO NUM1  VAR1  NUM2
1 	12.34 12.34 12.34
2 	12.0  12.0  12
3 	12.05 12.05 12.05
4 	12.0  12.0  12
*/
举报

相关推荐

0 条评论