Oracle to_char函数的使用方法
Oracleto_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracleto_char函数的使用,希望对您能有所帮助。
Postgres格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型。
注意:所有格式化函数的第二个参数是用于转换的模板。
表5-7.格式化函数
表5-8.用于date/time转换的模板
所有模板都都允许使用前缀和后缀修改器。模板里总是允许使用修改器。前缀'
表5-9.用于日期/时间模板
用法须知:
- 如果没有使用
FX 选项,to_timestamp 和to_date 忽略空白。FX 必须做为模板里的第一个条目声明。 - 反斜杠("
\")必须用做双反斜杠(" \\"),例如 '\\HH\\MI\\SS'。 - 双引号('"')之间的字串被忽略并且不被分析。如果你想向输出写双引号,你必须在双引号前面放置一个双反斜杠(
'\\'), 。例如'\\"YYYYMonth\\"' 支持不带前导双引号('"')的文本,但是在双引号之间的任何字串会被迅速处理并且还保证不会被当作模板关键字解释(例如:to_char '"HelloYear:"YYYY' )。
表5-10.用于
用法须知:
- 使用'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.
Oracleto_char函数最简单的应用:
/*1.0123--->'1.0123'*/
SelectTO_CHAR(1.0123)FROMDUAL
/*123--->'123'*/
SelectTO_CHAR(123)FROMDUAL
接下来再看看下面:
/*0.123--->'.123'*/
SELECTO_CHAR(0.123)FROMDUAL
上面的结果'.123'在大多数情况下都不是我们想要的结果,我们想要的应该是'0.123'。
我们来看一下to_char函数的具体用法:
TO_CHAR(n[,fmt[,'nlsparam']])
Oracleto_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'*/
SelectTO_CHAR(0.123,'0.999')FROMDUAL
/*100.12--->'######'*/
SelectTO_CHAR(100.12,'0.999')FROMDUAL
/*1.12--->'1.120'*/
SelectTO_CHAR(1.12,'0.999')FROMDUAL
'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位进行四舍五入
*/
SelectTO_CHAR(123.0233,'FM9999999.0099')FROMDUAL