Oracle to_char函数的使用方法
Oracle to_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracle to_char函数的使用,希望对您能有所帮助。
Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型。
注意:所有格式化函数的第二个参数是用于转换的模板。
表 5-7. 格式化函数
| 函数 | 返回 | 描述 | 例子 |
|---|---|---|---|
| to_char(timestamp, text) | text | 把 timestamp 转换成 string | to_char(timestamp 'now','HH12:MI:SS') |
| to_char(int, text) | text | 把 int4/int8 转换成 string | to_char(125, '999') |
| to_char(float, text) | text | 把 float4/float8 转换成 string | to_char(125.8, '999D9') |
| to_char(numeric, text) | text | 把 numeric 转换成 string | to_char(numeric '-125.8', '999D99S') |
| to_date(text, text) | date | 把 string 转换成 date | to_date('05 Dec 2000', 'DD Mon YYYY') |
| to_timestamp(text, text) | date | 把 string 转换成 timestamp | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
| to_number(text, text) | numeric | 把 string 转换成 numeric | to_number('12,454.8-', '99G999D9S') |
表 5-8. 用于 date/time 转换的模板
| 模板 | 描述 |
|---|---|
| HH | 一天的小时数 (01-12) |
| HH12 | 一天的小时数 (01-12) |
| HH24 | 一天的小时数 (00-23) |
| MI | 分钟 (00-59) |
| SS | 秒 (00-59) |
| SSSS | 午夜后的秒 (0-86399) |
| AM or A.M. or PM or P.M. | 正午标识(大写) |
| am or a.m. or pm or p.m. | 正午标识(小写) |
| Y,YYY | 带逗号的年(4 和更多位) |
| YYYY | 年(4和更多位) |
| YYY | 年的后三位 |
| YY | 年的后两位 |
| Y | 年的最后一位 |
| BC or B.C. or AD or A.D. | 年标识(大写) |
| bc or b.c. or ad or a.d. | 年标识(小写) |
| MONTH | 全长大写月份名(9字符) |
| Month | 全长混合大小写月份名(9字符) |
| month | 全长小写月份名(9字符) |
| MON | 大写缩写月份名(3字符) |
| Mon | 缩写混合大小写月份名(3字符) |
| mon | 小写缩写月份名(3字符) |
| MM | 月份 (01-12) |
| DAY | 全长大写日期名(9字符) |
| Day | 全长混合大小写日期名(9字符) |
| day | 全长小写日期名(9字符) |
| DY | 缩写大写日期名(3字符) |
| Dy | 缩写混合大小写日期名(3字符) |
| dy | 缩写小写日期名(3字符) |
| DDD | 一年里的日子(001-366) |
| DD | 一个月里的日子(01-31) |
| D | 一周里的日子(1-7;SUN=1) |
| W | 一个月里的周数 |
| WW | 一年里的周数 |
| CC | 世纪(2 位) |
| J | Julian 日期(自公元前4712年1月1日来的日期) |
| Q | 季度 |
| RM | 罗马数字的月份(I-XII;I=JAN)-大写 |
| rm | 罗马数字的月份(I-XII;I=JAN)-小写 |
所有模板都都允许使用前缀和后缀修改器。模板里总是允许使用修改器。前缀 'FX' 只是一个全局修改器。
表 5-9. 用于日期/时间模板 to_char() 的后缀
| 后缀 | 描述 | 例子 |
|---|---|---|
| FM | 填充模式前缀 | FMMonth |
| TH | 大写顺序数后缀 | DDTH |
| th | 小写顺序数后缀 | DDTH |
| FX | 固定模式全局选项(见下面) | FX Month DD Day |
| SP | 拼写模式(还未实现) | DDSP |
用法须知:
- 如果没有使用 FX 选项,to_timestamp 和 to_date 忽略空白。FX 必须做为模板里的第一个条目声明。
- 反斜杠("\")必须用做双反斜杠("\\"),例如 '\\HH\\MI\\SS'。
- 双引号('"')之间的字串被忽略并且不被分析。如果你想向输出写双引号,你必须在双引号前面放置一个双反斜杠('\\'),例如 '\\"YYYY Month\\"'。
- to_char 支持不带前导双引号('"')的文本,但是在双引号之间的任何字串会被迅速处理并且还保证不会被当作模板关键字解释(例如:'"Hello Year: "YYYY')。
表 5-10. 用于 to_char(numeric) 的模板
| 模板 | 描述 |
|---|---|
| 9 | 带有指定位数的值 |
| 0 | 前导零的值 |
| . (句点) | 小数点 |
| , (逗号) | 分组(千)分隔符 |
| PR | 尖括号内负值 |
| S | 带负号的负值(使用本地化) |
| L | 货币符号(使用本地化) |
| D | 小数点(使用本地化) |
| G | 分组分隔符(使用本地化) |
| MI | 在指明的位置的负号(如果数字 < 0) |
| PL | 在指明的位置的正号(如果数字 > 0) |
| SG | 在指明的位置的正/负号 |
| RN | 罗马数字(输入在 1 和 3999 之间) |
| TH or th | 转换成序数 |
| V | 移动 n 位(小数)(参阅注解) |
| EEEE | 科学记数。现在不支持。 |
用法须知:
- 使用 'SG','PL' 或 'MI' 的带符号字并不附着在数字上面;例如,to_char(-12, 'S9999') 生成 ' -12',而 to_char(-12, 'MI9999') 生成 '- 12'。Oracle 里的实现不允许在 9 前面使用 MI,而是要求 9 在 MI前面。
- PL,SG,和 TH 是 Postgres 扩展。
- 9 表明一个与在 9 字串里面的一样的数字位数。如果没有可用的数字,那么使用一个空白(空格)。
- TH 不转换小于零的值,也不转换小数。TH 是一个 Postgres 扩展。
- V 方便地把输入值乘以 10^n,这里 n 是跟在 V 后面的数字。to_char 不支持把 V 与一个小数点绑在一起使用(例如. "99.9V99" 是不允许的)。
表 5-11. to_char 例子
| 输入 | 输出 |
|---|---|
| to_char(now(),'Day, HH12:MI:SS') | 'Tuesday , 05:39:18' |
| to_char(now(),'FMDay, HH12:MI:SS') | 'Tuesday, 05:39:18' |
| to_char(-0.1,'99.99') | ' -.10' |
| to_char(-0.1,'FM9.99') | '-.1' |
| to_char(0.1,'0.9') | ' 0.1' |
| to_char(12,'9990999.9') | ' 0012.0' |
| to_char(12,'FM9990999.9') | '0012' |
| to_char(485,'999') | ' 485' |
| to_char(-485,'999') | '-485' |
| to_char(485,'9 9 9') | ' 4 8 5' |
| to_char(1485,'9,999') | ' 1,485' |
| to_char(1485,'9G999') | ' 1 485' |
| to_char(148.5,'999.999') | ' 148.500' |
| to_char(148.5,'999D999') | ' 148,500' |
| to_char(3148.5,'9G999D999') | ' 3 148,500' |
| to_char(-485,'999S') | '485-' |
| to_char(-485,'999MI') | '485-' |
| to_char(485,'999MI') | '485' |
| to_char(485,'PL999') | '+485' |
| to_char(485,'SG999') | '+485' |
| to_char(-485,'SG999') | '-485' |
| to_char(-485,'9SG99') | '4-85' |
| to_char(-485,'999PR') | '<485>' |
| to_char(485,'L999') | 'DM 485 |
| to_char(485,'RN') | ' CDLXXXV' |
| to_char(485,'FMRN') | 'CDLXXXV' |
| to_char(5.2,'FMRN') | V |
| to_char(482,'999th') | ' 482nd' |
| to_char(485, '"Good number:"999') | 'Good number: 485' |
| to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999') | 'Pre-decimal: 485 Post-decimal: .800' |
| to_char(12,'99V999') | ' 12000' |
| to_char(12.4,'99V999') | ' 12400' |
| to_char(12.45, '99V9') | ' 125' |
Oracle to_char函数最简单的应用:
/*1.0123--->'1.0123'*/
Select TO_CHAR(1.0123) FROM DUAL
/*123--->'123'*/
Select TO_CHAR(123) FROM DUAL
接下来再看看下面:
/*0.123 ---> '.123' */
SELEC TO_CHAR(0.123) FROM DUAL
上面的结果 '.123' 在大多数情况下都不是我们想要的结果,我们想要的应该是 '0.123'。
我们来看一下to_char函数的具体用法:
TO_CHAR ( n [, fmt [, 'nlsparam']] )
Oracle to_char函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。'nlsparams'指定由数值格式的元素返回的字符,包括:
.小数点字符
.组分隔符
.本地钱币符号
.国际钱币符号
变元的形式为:
'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'
其中d为小数点字符,g为组分隔符。
例 :TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145
通过上面的了解,再查看fmt的一些格式,我们可以用以下表达式得到'0.123'的值:
/*0.123 ---> ' 0.123' */
Select TO_CHAR(0.123,'0.999') FROM DUAL
/*100.12 ---> '######' */
Select TO_CHAR(100.12,'0.999') FROM DUAL
/*1.12 ---> ' 1.120' */
Select TO_CHAR(1.12,'0.999') FROM DUAL
' 0.123'是出来了,可是前面又多了一个空格。
对于 100.12 的值却是######,以及'1.12'的值变成了 '1.120'。
我们重新确定一个新的需求:
1、去空格
2、小数点最多4位,最少保留2位。
1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';
1.12345--->'1.1235'
最终实现如下:
/*
FM :除空格
9999999.0099:允许小数点左边最大正数为7位,小数点右边最少2位,最多4位,且在第5位进行四舍五入
*/
Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUALv
Oracle to_char函数的使用方法的更多相关文章
- ORACLE常用函数的使用方法
ORACLE常用函数的使用方法 1. 字符串函数 (1) length(); 获取字符长度SELECT LENGTH('中国') FROM PLATFORM_METAINFO_TABLES WHERE ...
- Oracle to_char()函数的使用细则
Oracle to_char()函数的使用细则,学习连接 http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html
- ORACLE TO_CHAR函数格式化数字的出现空格的原因
在这篇博客SQL挑战--如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字,'0000')这样的写法,后面0000表示缺省补零,测试过 ...
- oracle to_char函数使用
Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型. 注意:所有格式化 ...
- 关于Oracle to_char()函数中的IW,WW 周别显示
1)ww的算法为每年1月1日为第一周开始,date+6为每一周结尾 例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 公式 每周第一天 :date + ...
- oracle to_Char fm 函数
近期在使用oracle to_char函数处理浮点数时发现有坑,这里做个小结: 网上可以找到关于to_char中使用fm9990.0099中的相关解释: 0表示:如果参数(double或者float类 ...
- oracle add_months函数的用法详解
如果需要取上一个月的数据,并且每天都要进行此操作,每次都需要改时间,的确非常的麻烦,所以想到了oracle add_months函数这个函数 oracle add_months函数: oracle a ...
- Oracle 中的 TO_DATE 和 TO_CHAR 函数
Oracle 中的 TO_DATE 和 TO_CHAR 函数oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式 说明 显示值 备注 Year(年) ...
- 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
Oracle 中的 TO_DATE 和 TO_CHAR 函数oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式 说明 显示值 备注 Year(年) ...
随机推荐
- LINUX系统一一常用命令
前言 LINUX UNIX Centos RedHat Ubuntu SHELL shell脚本 shell shell命令 类似windows系统的bat 批处理文件 里面都是脚本 CentOS6. ...
- 1.网站js文件获取
++++++++++++++++++++++ pls,input your domain like: http://111.com #coding:utf8 #encoding=utf8 import ...
- JSTL标签不起作用的解决办法
JSP页面中的EL标签直接成字符串输出(如:${user.id}),说明el标签没有被识别,造成的原因有: 1.jdk+jstl的组合不匹配 2.web.xml版本不匹配 但我们解决以上这个问题时,先 ...
- FTP 站点及配置
新建FTP站点根据导航步骤一步步来即可. windows server 2008 中ftp的部署以及防火墙的配置 部署环境:Windows Server Enterprise 2008 R2 64b ...
- linux下各权限的细分
PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...
- Python基础之-----------函数
---恢复内容开始--- 函数:在其他的语言中,我们也经常听到函数的概念,那么什么是函数呢?在Java中叫做method: 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函 ...
- MVC004之页面引用命名空间
描述:在控制器中返回了一个ViewData["currUser"] 给view,ViewData["currUser"]为 Greatwall.Hr.Bll.H ...
- Linux 学习总结(一)
一.Linux系统有7个运行级别(runlevel) 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行 ...
- 手机通过Charles抓取https包
因为fiddler不能在mac上使用,而Charles是跨平台的,可以在mac上使用,所以需要了解一下Charles的使用 安装破解版Charles 下载破解版包,先启动一次未破解版的Ch ...
- 【Scheme】符号求导
思路: 定义一个求导算法, 令其在抽象对象上执行求导操作. 可以由以下规约规则完成: dc/dx=0 dx/dx=1 d(u+v)/dx=du/dx+dv/dx d(uv)/dx=u(dv/dx)+v ...