Oracleto_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 pm 正午标识(⼩写)
Y,YYY带逗号的年(4 和更多位)
YYYY年(4和更多位)
YYY年的后三位
YY年的后两位
Y年的最后⼀位
BC or B.C. or AD or A.D.年标识(⼤写)
bc 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)
⼀年⾥的⽇⼦(001-366)
⼀个⽉⾥的⽇⼦(01-31)
⼀周⾥的⽇⼦(1-7;SUN=1)
⼀个⽉⾥的周数
⼀年⾥的周数
世纪(2 位)
Julian ⽇期(⾃公元前4712年1⽉1⽇来的⽇期)
季度
罗马数字的⽉份(I-XII;I=JAN)-⼤写
罗马数字的⽉份(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'
oracle decimal类型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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论