转换函数
转换函数可以完成不同数据类型之间的转换,是平常使用比较多的函数类型之一。本节将介绍平常使用率较高的转换函数。
1. TO_CHAR(number) 函数。
该函数将一个数值型参数转换成字符型数据。其具体语法结构是 TO_CHAR(n,[,fmt[,nlsparam]])
,各参数表示含义如下:
n:数值型数据。
fmt:要转成字符的格式。
nlsparam:由该参数指定
fmt
的特征。通常包括小数点字符、组分隔符、本地钱币符号。
该函数如果想用的好需要了解多方面的知识,这里不做详细介绍。
示例脚本如下:
select to_char(16.89), to_char(16.89, '99.9')
from dual;
2. TO_CHAR(date) 函数。
该函数将一个日期型数据转换成一个字符型数据。
它同前面介绍的同名函数一样,只不过转换的对象变化了。
具体的语法结构是 TO_CHAR(n,[,fmt[,nlsparam]])
,各参数具体含义如下:
n:日期类型数据。
fmt:要转成字符的格式。
nlsparam:使用的语言类型。
示例脚本如下:
select to_char(sysdate, 'YYYY-MM-DD'),
to_char(sysdate, 'HH24:MI:SS'),
to_char(sysdate, 'D'),
to_char(sysdate, 'WW'),
to_char(sysdate, 'Q'),
to_char(sysdate)
from dual;
3. TO_DATE 函数。
该函数可将字符型数据转换成日期型数据。
函数的具体语法结构是 TO_DATE(char[,fmt[,nlsparam]])
。
各参数的具体含义如下:
char:待转换的字符。类型可以是 CHAR、VARCHAR2、NCHAR、NVARCHAR2。
fmt:表示转换的格式。
nlsparam:控制格式化时使用的语言类型。
示例脚本如下:
select to_char(to_date('2010-7-1', 'YYYY-MM-DD'), 'MONTH')
from dual;
4. TO_NUMBER 函数。
该函数将字符串转成数字。语法结构是 TO_NUMBER(expr[,fmt[,nlsparam]])
,各参数表示的具体含义如下:
expr:待转换的字符,其类型可以是 CHAR、VARCHAR2、NCHAR、NVARCHAR2。
fmt:指定转换的数字格式。
nlsparam:该参数指定 fmt 的特征。通常包括小数点字符、组分隔符、本地钱币符号。
示例脚本如下:
select to_number('2456.304', '9999.999')
from dual;
5. 数字格式元素
数字格式模型由一个或多个数字格式元素组成。
下表列出了数字格式模型的元素。
元素 | 举例 | 说明 |
---|---|---|
, (逗号) |
9,999 |
返回指定位置的逗号。 可以在数字格式模型中指定多个逗号。 限制: 逗号元素无法启动数字格式模型。 逗号不能出现在数字格式模型中的十进制字符或句点的右侧。 |
. (句号) |
99.99 |
返回小数点,即指定位置的句点(.)。 限制: 只能在数字格式模型中指定一个句点。 |
$ |
$9999 |
返回带有前导美元符号的值。 |
0 |
0999 9990 |
返回前导零。 返回尾随零。 |
9 |
9999 |
返回具有指定位数的值,如果为正数,则前导空格;如果为负,则返回前导减号。前导零是空白的,除了零值,它返回零作为定点数的整数部分。 |
B |
B9999 |
当整数部分为零时(无论格式模型中的零如何),返回定点数的整数部分的空白。 |
C |
C999 |
在指定位置返回 ISO 货币符号(NLS_ISO_CURRENCY 参数的当前值)。 |
D |
99D99 |
在指定位置返回十进制字符,即 NLS_NUMERIC_CHARACTER 参数的当前值。默认值为句点(.)。 限制: 只能在数字格式模型中指定一个十进制字符。 |
EEEE |
9.9EEEE |
使用科学计数法返回值。 |
G |
9G999 |
返回指定位置的组分隔符(NLS_NUMERIC_CHARACTER 参数的当前值)。可以在数字格式模型中指定多个组分隔符。 限制: 组分隔符不能出现在数字格式模型中的小数字符或句点的右侧。 |
L |
L999 |
在指定位置返回本地货币符号(NLS_CURRENCY 参数的当前值)。 |
MI |
9999MI |
使用尾随减号(-)返回负值。 返回带有尾随空白的正值。 限制: MI 格式元素只能出现在数字格式模型的最后位置。 |
PR |
9999PR |
返回尖括号 <> 中的负值。返回带有前导和尾随空白的正值。 限制: PR 格式元素只能出现在数字格式模型的最后位置。 |
RN |
RN |
以大写形式返回罗马数字的值。 |
rn |
rn |
以小写形式返回罗马数字的值。 值可以是 1 到 3999 之间的整数。 |
S |
S9999 9999S |
使用前导减号(-)返回负值。 使用前导加号(+)返回正值。 使用尾随减号(-)返回负值。 使用尾随加号(+)返回正值。 限制: S 格式元素只能出现在数字格式模型的第一个或最后一个位置。 |
TM |
TM |
文本最小数字格式模型返回(十进制输出)可能的最小字符数。此元素不区分大小写。 默认值为 TM9,它以固定表示法返回数字,除非输出超过 64 个字符。如果输出超过 64 个字符,则 Oracle 数据库会自动以科学计数形式返回该数字。 限制: 不能在此元素之前添加任何其他元素。 只能使用一个 9 或一个 E(或 e)来跟随此元素,但不能与这些元素的任何组合一起使用。以下语句返回错误: SELECT TO_CHAR(1234, 'TM9e') FROM DUAL; |
U |
U9999 |
在指定位置返回欧元(或其他)双重货币符号,由 NLS_DUAL_CURRENCY 参数的当前值确定。 |
V |
999V99 |
返回一个乘以 10 n 的值(如果需要,将其四舍五入),其中 n 是 9 之后的数字 V。 |
X |
XXXX |
返回指定位数的十六进制值。如果指定的数字不是整数,则 Oracle 数据库将其舍入为整数。 限制: 此元素仅接受正值或 0. 负值返回错误。 可以在此元素之前仅使用 0(返回前导零)或 FM。任何其他元素都会返回错误。如果既不指定 0 也不指定带有 X 的 FM,则返回总是有一个前导空白。 |
6. 日期时间格式元素
日期时间格式模型由一个或多个日期时间格式元素组成。
下表列出了日期格式模型的元素。
元素 | 说明 |
---|---|
- / , . ; : "文本" |
在结果中复制标点符号和引用的文本。 |
AD A.D. |
AD 指示有或没有句点。 |
AM A.M. |
上午的简写 |
BC B.C. |
表示公元前 |
CC SCC |
世纪。 如果 4 位数年份的最后 2 位数字介于 01 和 99(含)之间,则该世纪比该年份的前 2 位数大 1。 如果 4 位数年份的最后 2 位数字是 00,则该世纪与该年份的前 2 位数字相同。 例如,2002 年返回 21; 2000 年回归 20。 |
D |
星期几(1-7)。 |
DAY |
一周之中的某天,不过返回的是星期几而已,这和语言设置有关系,在中国环境 NLS_DATE_LANGUAGE=SIMPLIFIED CHINESE ,用星期一到星期天表示 |
DD |
月份中的某天 (1-31) |
DDD |
年份中的某天(1-366) |
DL |
返回长的日期格式。受到 NLS_TERRITORY,NLS_LANGUAGE 参数控制。例 2008 年 4 月 28 日 星期一 限制: 只能使用 TS 元素指定此格式,以空格分隔。 |
DS |
返回短的日期格式。受到 NLS_TERRITORY,NLS_LANGUAGE 参数控制。 例如 2008-04-28 限制: 只能使用 TS 元素指定此格式,以空格分隔。 |
DY |
日期的简称,就是星期几(当然这指的是中国环境下) |
E |
缩写时代名称(日本帝国,中华民国官方和泰国佛历) |
EE |
全时代的名字(日本帝国,中华民国官方和泰国佛历) |
FF [1..9] |
在 FF 之后使用数字 1 到 9 指定返回的日期时间值的小数部分中的位数。如果未指定数字,则 Oracle 数据库将使用为 datetime 数据类型或数据类型的默认精度指定的精度。时间戳和间隔格式有效,但 DATE 格式不存在。 例子: 'HH:MI:SS.FF' SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from dual; |
FM |
返回没有前导或尾随空格的值。 |
FX |
需要字符数据和格式模型之间的精确匹配。 |
HH HH12 |
一天中的小时(1-12)。 |
HH24 |
一天中的小时(0-23)。 |
IW |
一年中的一周(1-52 或 1-53)基于 ISO 标准。 |
IYY IY I |
ISO 年份的最后 3 个,2 个或 1 个数字。 |
IYYY |
基于 ISO 标准的 4 位数年份。 |
J |
朱利安日;公元前 4712 年 1 月 1 日以来的天数。用 J 指定的数字必须是整数。 |
MI |
分钟(0-59)。 |
MM |
月(01-12; 1 月 = 01)。 |
MON |
月的简称,和国家有关系 NLS_DATE_LANGUAGE,例如 04 在中文环境下用 4 月表示。 |
MONTH |
月的名称,国家有关系 NLS_DATE_LANGUAGE, 目前在中文下 04 表示为 4 月。 |
PM P.M. |
同 am,a.m. 表示下午 |
Q |
季度(1-4) |
RM |
用罗马数字表示的月份,I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII |
RR |
只用两位数就可以存储 21 世纪的 20 世纪日期。 |
RRRR |
一年。接受 4 位或 2 位输入。如果是 2 位数,则提供与 RR 相同的返回值。 |
SS |
秒(0-59),一分钟内 |
SSSSS |
一天从午夜开始的累积秒数。(0-86399) |
TS |
以短时间格式返回值。 |
TZD |
夏令时信息。TZD 值是带有夏令时信息的缩写时区字符串。它必须与 TZR 中指定的区域相对应。时间戳和间隔格式有效,但 DATE 格式不存在。 |
TZH |
时区小时。(请参阅 TZMformat 元素。)以时间戳和间隔格式有效,但不以 DATE 格式表示。 |
TZM |
时区分钟。(请参阅 TZHformat 元素。)以时间戳和间隔格式有效,但不以 DATE 格式表示。 |
TZR |
时区地区信息。该值必须是数据库中支持的时区之一。时间戳和间隔格式有效,但 DATE 格式不存在。 |
WW |
一年中的一周(1-53),其中第 1 周从一年的第一天开始并持续到一年的第七天。 |
W |
每周的一周(1-5),其中第 1 周从该月的第一天开始,到第七周结束。 |
X |
本地基数字符。 |
Y , YYY |
四位年,用逗号分隔 |
YEAR SYEAR |
发音表达的年,例如 2008=two thousand eight |
YYYY SYYYY |
四位年,S 前缀表示公元前 BC |
YYY YY Y |
一次表示后面 3,2,1 位的年,例如 2008 可以分别取值为 008,08,8 |