Oraclenumber类型转换为varchar2
项⽬初期表结构设计是⾮常重要,在字段类型定义样也要格外⼩⼼,业务开展后,修改字段类型代价⾮常⼤。本⽂主要记录在 oracle 中number 类型转换为 varchar2 数据类型⽅法以及案例演⽰。
number类型的数据直接存⼈ varchar2类型的字段中,会出现格式问题,如:.5, 5. 等
to_char(number)
可将 number 类型转换为 varchar2 类型,可以指定格式 fmt(可选);
参数n,可以是 NUMBER、BINARY_FLOAT 或 BINARY_DOUBLE 类型;
nlsparam 参数指定了数值格式的元素返回的字符:包括:⼩数点字符(d)、组分隔符(g)、本地货币符号、国际货币符号。
格式化修饰符 FM
9: 代表如果存在数字则显⽰数字,不存在数字为空字符串(⾮FM格式则会补空格);
0: 代表如果存在数字则显⽰数字,不存在数字则显⽰0;
⼩数会做四舍五⼊处理,如果不想四舍五⼊,现将数据做 trunc 处理后,再转换格式;
注意点:
转换整数需要注意末尾是否多了⼩数点;
转换⼩于1的⼩数⾸位的0会丢失;
数据长度⼤于 fmt 定义的长度,转换会发⽣异常;
基本⽤法
-- 9 不会补占位符
select to_char(123.45,'FM9999.999')from dual;
-- ==>
-
- 补占位符 0
select to_char(123.45,'FM0000.000')from dual;
-- ==>0123.450
-- 四舍五⼊
select to_char(123.4567,'FM9999.999')from dual;
-- ==>123.457
select length(to_char(123.4567,'FM9999.999'))from dual;
-- ==> 7
整数格式化问题
select to_char(123,'FM9999.999')from dual;
-- ==>123.
-
- 解决⽅案1
select regexp_replace(to_char(123,'FM9999.999'),'\.$','')from dual;
-- ==>123
-- 解决⽅案2
select to_char(123,'FM9999.099')from dual;
-- ==>123.0
oracle四舍五入⼩数格式化问题(⼩于1的数)
建议格式化数值,如果不确定是整数,还是⼩于1的数,在⼩数点左右使⽤ 0 作为占位符;-- ⼩数格式化问题(⼩于1的数)
select to_char(0.123,'FM9999.999')from dual;
-- ==>.123
-- 解决⽅法
select to_char(0.123,'FM9990.999')from dual;
-- ==>0.123
数据太长导致的错误
-- 数据太长导致的错误:
select to_char(123.4567,'FM99.9')from dual;
-- ==>>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论