文章目录
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
*/