在这篇博客SQL挑战——如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字,'0000')这样的写法,后面0000表示缺省补零,测试过程中,我发发现TO_CHAR(number,'0000') 会多一个空格。有点纳闷为什么了会多一个空格。

后面经过查看官方文档、同事讨论以及网友提供的资料,终于把这个问题给弄清楚了。下面梳理、总结于此,希望对其它人有所帮助。

在官方文档https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570里面你能看到一段介绍

Number Format Elements

A number format model is composed of one or more number format elements. The tables that follow list the elements of a number format model and provide some examples.

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading space unless the format model contains the MI, S, or PR format element.

注意红色部分,意思是Number类型转换为字符时,负数会返回前面包含负号的字符串,正数则会返回前面包含空格的字符串,除非格式模式包含MI、S、或PR元素。查看TO_CHAR(4, '0000')返回的字符串长度,你会发现其长度为5.

   1: SQL> SELECT TO_CHAR(4, '0000') FROM DUAL;

   2:  

   3: TO_CH

   4: -----

   5:  0004

   6:  

   7: SQL> SELECT LENGTH(TO_CHAR(4, '0000')) FROM DUAL;

   8:  

   9: LENGTH(TO_CHAR(4,'0000'))

  10: -------------------------

  11:                         5

  12:  

  13: SQL> SELECT TO_CHAR(-4, '0000') FROM DUAL;

  14:  

  15: TO_CH

  16: -----

  17: -0004

那么如何解决这个问题呢,目前有两种方法,一种方法是用TRIM去空格,另外一种是使用参数MI(MI参数是正数的空格放到字符串后面,将负数的负号放置在字符串后面),关于参数MI的解释如下所示:

Returns negative value with a trailing minus sign (-).

Returns positive value with a trailing blank.

Restriction: The MI format element can appear only in the last position of a number format model.

返回负值与尾随的负号 (-)。

返回正值尾随空白。

限制: MI 格式元素可以只能出现在数字的格式模式的最后一个位置。

其实这些还只是TO_CHAR函数的冰山一角,如果你通读文档https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570那么你会发现其实你所掌握的TO_CHAR函数还只是个皮毛而已。一个TO_CHAR函数如此强大,可见ORACLE的博大精深。

 

参考资料:

    http://blog.163.com/wangpeng126_2009@126/blog/static/121022611201454111640254/ 

https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570

ORACLE TO_CHAR函数格式化数字的出现空格的原因的更多相关文章

  1. Oracle to_char函数的使用方法

    Oracle to_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracle to_char函数的使用,希望对您能有所帮助. Postgres 格式化函数提供一套有效的工具用 ...

  2. Oracle to_char()函数的使用细则

    Oracle to_char()函数的使用细则,学习连接 http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html

  3. Oracle trunc() 函数处理数字、日期的整理

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  4. oracle to_char函数使用

    Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型. 注意:所有格式化 ...

  5. Oracle TO_DATE() 函数格式化时间【全】

    TO_DATE格式(以时间:2007-11-02   13:45:25为例)          Year:             yy two digits 两位年                显 ...

  6. oracle单行函数之数字函数

    round--四舍五入函数 trunc--截断函数 mod--求余函数 round和trunc除了可以操作数字外还可以操作日期. Demo SQL),),),),) from dual ; ) ) ) ...

  7. oracle单行函数 之 数字函数

    Round(数字 \ 列 [,保留小数的位数]):四舍五入   select Round(1234.45,1) from dual  =  1234.5 Trunc(数字 \ 列 [,保留小数的位数] ...

  8. 关于Oracle to_char()函数中的IW,WW 周别显示

    1)ww的算法为每年1月1日为第一周开始,date+6为每一周结尾 例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 公式 每周第一天 :date + ...

  9. oracle to_Char fm 函数

    近期在使用oracle to_char函数处理浮点数时发现有坑,这里做个小结: 网上可以找到关于to_char中使用fm9990.0099中的相关解释: 0表示:如果参数(double或者float类 ...

随机推荐

  1. Nancy 自定义JsonSerializer

    1.创建自己的jsonserializer类 public class CustomJsonNetSerializer : JsonSerializer, ISerializer { public C ...

  2. jquery可见性选择器(匹配所有隐藏的元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 用xutils3.0进行下载

    写的例子比较简单,是用xutils3.0来进行下载项目更新 1.先通过网络请求,判断版本是否要更新 2.若要更新,则弹出一个弹窗,我用的是系统自带的Dialog,将下载的版本号及下载的内容提示展示出来 ...

  4. CenOS下firefox browser (火狐浏览器)无法播放网页音乐的解决方法

    新装载的Firefox或许无法播放网页音频,解决方法如下: 1. 下载并安装 flashplayer插件&&下载网址:https://get.adobe.com/flashplayer ...

  5. 把Java生成的RSA公钥、私钥转换成.NET使用的XML格式

    import java.security.KeyFactory; import java.security.interfaces.RSAPrivateCrtKey; import java.secur ...

  6. mysq基础一(字段类型)

    本文转自 “旋木的技术博客” 博客,http://mrxiong.blog.51cto.com/287318/1651098 一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类 ...

  7. 学习HTML5之表单

    HTML5 的标准已经定了,应该火了,或者已经火了.那么是不是可以学习一下呢? 目前h5的主场还是在手机端,pc还是受困于浏览器的兼容,主要是IE在拖后腿.所以这里侧重的是手机里面的表现. 先来看看表 ...

  8. C# 泛型的协变和逆变

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量.协变和逆变是两个相互对立的概念: 如 ...

  9. fakeLoader页面加载前loading演示8种效果

    提高用户体验的插件fakeLoader页面加载前loading演示8种效果 在线预览 下载地址 示例代码 <div id="main"> <div class=& ...

  10. 如何在没有安装微软Excel环境下操作Excel文件?

    在以前接触的项目中,由于很多客户对微软Excel的操作比较熟练,客户经常要求系统支持对Excel文件的读写.用.NET传统方法对Excel进行读写时,往往会涉及到不同版本兼容的问题,导致在本地测试一切 ...