欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

OraclePL/SQL开发基础:类型转换函数

程序员文章站 2022-04-17 11:01:20
那么多的类型转换函数中,常用的也就是to_char,to_number,to_date这几个。下面对这几个进行详细的介绍。 使用to_char将日期型转换为字符串 默认情况下,日期格式都是以dd-m...

那么多的类型转换函数中,常用的也就是to_char,to_number,to_date这几个。下面对这几个进行详细的介绍。

使用to_char将日期型转换为字符串

默认情况下,日期格式都是以dd-mon-yy来显示的,为了使其他的 显示格式显示日期值,可以使用to_char将日期从默认格式转换为指定的格式。例如:

select to_char (sysdate, 'yyyy-mm-dd hh24:mi:ss am')
  from dual

可以看到,要显示为特定的日期格式,必须要指定特定的日期格式字符串,可以使用的格式字符串如下:

日期格式元素 描述
scc或cc 世纪,带-服务器前缀b.c.日期
日期中的年yyyy或syyyy 年,带-服务器前缀b.c.日期
yyy或yy或y 年的最后3、2或1个数字
y,yyy 年,在这个位置带逗号
iyyy,iyy,iy,i 基于iso标准的4、3、2或1位数字年
syear或year 拼写年,带-服务器前缀b.c.日期
bc或ad b.c.a.d指示器
b.c.或a.d. 带周期的b.c./a.d指示器
q 四分之一年,即季度
mm 月,2位数字值
month 9位字符长度的带空格填充的月的名字
mon 3字母缩写的月的名字
rm 罗马数字月
ww或w 年或月的周
ddd或dd或d 年、月或周的天
day 9位字符长度的带空格填充的天的名字
dy 3字母缩写的天的名字
hh、hh12或hh24 天的小时,或小时(1~12),或小时(0~23)
am或pm和a.m.或p.m. 午后指示符,可带句点也可以不带句点
间隔符 在结果字符串中所产生的所有必须的停顿间隔符
ss 秒(0~59)
sssss 午夜之后的秒(0~86399)
“of the” 在结果中使用引文串
/., 在结果中使用标点符号
th 序数(例如,ddth显示为4th)
sp 拼写出数字(例如,ddsp显示为four)
spth或thsp 拼写出序数(例如:ddspth显示为fourth)

常用示例如下:

select to_char (sysdate, 'ddspth') from dual;
select to_char(sysdate, 'hh24:mi:ss am') from dual;
select to_char (sysdate, 'dd "of" month') from dual;
select to_char(sysdate,'a.d.yyyy"年"-month-dd"日"-day') from dual;
select to_char(sysdate,'w') from dual;

通过灵活地组织这些格式字符串,可以创建出很多想要的日期格式。

使用to_char将数字型转换为字符串

如,将一个数字转换成带货币符号的字符串:

select to_char(123.45678,'$99999.999') from dual;

to_char在将数字转换为字符串时,可以使用格式字符串指定转换时使用的格式,常见的格式符元素如下:

数字格式元素 描述 示例 结果
9 每个9表示一个有效位,转换值的有效位和9的各位相同,如果要转换的是负数,则应有前导的负号,前导如为0,则视为空格 999999 1234
0 显示前导的0或后继的0 099999 001234
$ 返回带有前导货币符号的数值 $999999 $1234
l 在指定的位置上返回本地货币符号 l99999 ¥1234
. 在指定的位置上返回一个小数点,不管指定的小数点分隔符 999999.99 1234.00
, 在指定的位置上返回一个逗号,不管指定的千分位分隔符 999,999 1,234
mi 该值如为负数,则加后继负号,如非负数则加一个后继占位符 999999mi 1234-
pr 如为负值,用尖括号括起,如为正值,则前导后继各加一个空格 999999pr <1234>
eeee 科学计数法(格式化必须指定四个e) 99.999eeee 1.234e+03
v 返回与10的n次方相乘的值,n是v后面9的个数 9999v99 123400
b 当整数为0时,将该小数的整数部分填充为空格 b9999.99 1234.00
d 返回小数点的位置,两边的9指定了最大位数 9999d 1234.
g 返回千分位分隔符,g可以出现多次 (99g99) 12,34
c 在指定的位置上返回iso货币号 c9999 cny1234

to_char中的nlsparams参数影响到最终结果的显示,一般有下面几种形式:
- nls_numeric_characters:可简写为nls_numeric_chars,表示为指定分组分隔符或小数点使用的字符。
- nls_currency:指定oracle默认的货币。
- nls_iso_currency:指定iso货币符号的字符。
使用示例如下:

select to_char (123456789, 'l999g999g999d99', 'nls_currency=%')
  from dual;-- 结果为:%123,456,789.00

使用to_date将字符换转换为日期

使用如:

select to_date ('2010/09/13', 'yyyy-mm-dd', 'nls_date_language=english')
  from dual;

select to_date ('20100913', 'yyyy-mm-dd')
  from dual;  

使用to_number将字符串转换为数字

使用如:

select to_number('01') from dual;

select to_number('$1234.5678','$9999.9999') from dual;

select to_number('$123,456,789.00','$999g999g999d99') from dual;