当前位置: 首页 > article >正文

Oracle 去除小数点后面的零

文章目录

  • 1 使用场景
  • 2 解决办法
    • 2.1 方法1:trim(trailing '0' from 列名)
    • 2.2 方法2:to_char(列名, 'FM999990.099')

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
*/

http://www.kler.cn/a/418955.html

相关文章:

  • 如何看linux系统内核是aarch64 ,还是64-bit
  • Javascript中DOM事件监听 (鼠标事件,键盘事件,表单事件)
  • 《Python基础》之Python中可以转换成json数据类型的数据
  • jQuery学习建议:从入门到精通的指南
  • LinkedList的了解
  • MySQL - 性能优化
  • CMAKE常用命令详解
  • 《Vue 组件化开发:构建可复用的模块》
  • 【笔记】成为雍正
  • CPU性能优化--性能瓶颈
  • 如何在 Debian 8 上设置 Apache 虚拟主机
  • Flask项目入门—会话技术Cookie和Session
  • SpringBoot整合WebService
  • flink学习(9)——time+water mark
  • Linux服务器使用JupyterLab
  • shell编程基础笔记
  • 相关前端程序
  • element-plus弹窗二次封装踩坑
  • repo仓库转移到自己本地的git服务器
  • PostgreSQL17官网下载详细教程
  • Flutter 指纹识别
  • MVC core 传值session
  • Android 混淆问题
  • Rust vs Java:后端开发应该选哪个?
  • npm 最新国内淘宝镜像地址源 (旧版已不能用)
  • VS Code前端常用插件