Oracle number 类型转换为 varchar2「建议收藏」

Oracle number 类型转换为 varchar2「建议收藏」项目初期表结构设计是非常重要,在字段类型定义样也要格外小心,业务开展后,修改字段类型代价非常大。本文主要记录在oracle中number类型转换为varchar2数据类型方法以及案例演示。number类型的数据直接存人varchar2类型的字段中,会出现格式问题,如:.5,5.等to_char(number)可将number类型转换为varchar2类型,可以指定格式fmt(可选);参数n,可以是NUMBER、BINARY_FLOAT或BINARY_DOUBL

大家好,又见面了,我是你们的朋友全栈君。

项目初期表结构设计是非常重要,在字段类型定义样也要格外小心,业务开展后,修改字段类型代价非常大。本文主要记录在 oracle 中 number 类型转换为 varchar2 数据类型方法以及案例演示。
number类型的数据直接存人 varchar2类型的字段中,会出现格式问题,如:.5, 5. 等

to_char(number)

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

  • 可将 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

小数格式化问题(小于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;
-- ==>#####

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163906.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • foreach 遍历map_怎么遍历map集合

    foreach 遍历map_怎么遍历map集合一、原生jsforEach()和map()遍历共同点:1.都是循环遍历数组中的每一项。2.forEach()和map()里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。3.匿名函数中的this都是指Window。4.只能遍历数组。1.forEach()没有返回值。…

    2022年9月21日
    0
  • 【原创】让你的系统轻松预览AI,PSD,EPS,CDR缩略图!

    【原创】让你的系统轻松预览AI,PSD,EPS,CDR缩略图!不知道怎么回事,我机子上的IllustratorCS3搞上之后还是无法预览AI和EPS的缩略图,有时候需要选用素材的时候,面对着很多的文件无法预览,只能一个一个猜着看,今天终于无法忍受了.于是上网查了一下.原来搞定很简单,只需要把那些大软件的一些DLL文件搞进系统就行了.下边是整理的一些补丁,不用安装,只需要拷贝到特定目录然后再倒入注册表文件就行了.文件包里有具体的使用方法.文件:…

    2022年4月30日
    65
  • DeepLab2:用于深度标记的TensorFlow库(2021)

    DeepLab2:ATensorFLowLibraryforDeepLabelingDeepLab2是一个用于深度标注的TensorFlow库,旨在为密集像素标注任务提供统一的、最先进的TensorFlow代码库,包括但不限于语义分割、实例分割、全景分割、深度估计,甚至视频全景分割。深度标记是指通过深度神经网络为图像中的每个像素分配预测值来解决计算机视觉问题。只要感兴趣的问题可以用这种方式表述,DeepLab2就应该达到目的。此外,此代码库包括我们最近的和最先进的深度标签研究模

    2022年4月15日
    47
  • 30分钟后页面自动跳转到登录页面「建议收藏」

    30分钟后页面自动跳转到登录页面「建议收藏」年前到年后这段时间很浮躁,继续学习之旅,从这篇博客开始,2018,加油!梭哈梭哈。。。。代码拿去,妥妥的,什么session,什么filter,什么listener<scriptlanguage=”javascript”>varmyTime=setTimeout(“Timeout()”,60000);functionresetTime()…

    2022年5月30日
    92
  • vue监听页面刷新事件_vue监听数据变化自动刷新

    vue监听页面刷新事件_vue监听数据变化自动刷新运用的知识点:JavaScript的onbeforeunload函数使用方法window.onbeforeunload=function(){  return‘’;}注意:有返回值(”,true,false…都可以)才能弹出显示,或者有需要执行的事件也行。onload、onunload、onbeforeunload的执行问题:页面加载…

    2025年8月3日
    4
  • httprunner3源码解读(4)parser.py「建议收藏」

    httprunner3源码解读(4)parser.py「建议收藏」源码结构目录可以看到此模块定义了4个属性和12个函数,我们依次来讲解属性源码分析#匹配http://或https://absolute_http_url_regexp=re.compil

    2022年8月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号