【IT168 服务器学院】日期和日期时间算术
运算 返回类型
结果
d1-d2 NUMBER
返回D1和D2之间相差的天数。该值是一个数值,其小数部分代表一天的几分之几。
dt1-dt2 INTERVAL
返回DT1和DT2之间的时间间隔。
i1-i2 INTERVAL
返回i1和i2之间的差距。
d1+d2 N/A
非法——仅能进行两个日期之间的相减。
dt1+dt2 N/A
非法——仅能进行两个日期之间的相减。
i1+i2 INTERVAL
返回i1和i2的和。
d1+n DATE
在D1上加上N天作为DATE类型返回。N可以是实数,它包含一天的几分之几。
d1-n DATE
从D1上减去N天作为DATE类型返回。N可以是实数,它包含一天的几分之几。
dt1+i1 DATETIME
返回DT1和I1的和。
dt1-i1 DATETIME
返回DT1和I1之间的差距。
i1*n INTERVAL
返回I1的N次方。
i1/n INTERVAL
返回I1除以N的值。
表中注:
D1和D2指日期值;
DT1和DT2指日期时间值;
I1和I2指时间间隔值;
N指数字值。
显示转换:(conversion)
TO_NUMBER(char[,''format_model'']) 字符转换到数字类型
TO_DATE(char[,''format_model'']) 字符转换到日期类型
格式说明符:要与前边要转换的字符串的格式要相同才能转换(匹配问题:格式和位数)。
TO_CHAR(date[,''format_model''[,nlsparams]])
第二个参数可以省略,不指定格式,按系统默认格式输出。
区分大小写。
使用FM(在格式控制符前添加)符号可以去掉空格或是首位的零。
如果指定了NLSPARAMS,则它控制返回字符串的月和日分量所使用的语言。格式为:
''NLS_DATA_LANGUAGE=language'',language指需要的语言。
例:
select to_char(sysdate,''FMyyyy-mm-dd'') from dual;
格式控制符的类型:
YYYY 四位的年
YEAR 年的拼写
MM 2位数字的月
MONTH 月的全名
MON 月名的前三个字符
DY 星期名的前三个字符
DAY 星期名的全称
DD 2位的天
时间格式控制符:
HH24:MI:SS AM
HH12:MI:SS PM
通过“”来实现加入特殊字符的格式控制符。
SELECT TO_CHAR(SYSDATE,''FMyyyy"年"mm"月"dd"日"'') from dual;
DDSPTH
~~
DD是格式控制符。
TH是序数词,将日期转换成英文的序数词拼写。
SP是基数词,将日期转换成英文的基数词拼写。
TO_CHAR(NUM[,''format_model''[,nlsparams]])转换数字
将NUMBER类型参数NUM转换成VARCHAR2类型。如果指定FORMAT,它会控制整个转换。
如果没有指定FORMAT,那么结果字符串中将包含和NUM中有效位的个数相同的字符。NLSPARAMS用来指定小数点和千分符及货币符号。它的格式可为:''NLS_NUMERIC_CHARS='' '' dg '' ''NLS_CURRENCY= '' ''string'' '' ''
d和g分别代表小数点和千分符。STRING代表货币符号。
数字格式控制符:
9 代表一位数字(替换符。有,数字显示;没有。不什么都显示。)
0 代表一位数字(有数字,显示;没有,强制显示0。)
$ 美圆符号
L 本地货币
. 小数点
, 千分符
B 当整数部分为0时,将整数部分填充为空格。 例:B999
MI 返回带有后继符号而不是前导负号的负数值,正数值将带有后继的空格。999MI
S 返回一个前导符号或后继符号,正数为+,负数为-。 S9999 或 9999S
PR 使用尖括号返回负数。正数将有前导或后继空格。999PR
D 在指定位置返回一个小数点。两侧的9的个数指定了最大的位数。99D9
G 在指定位置返回千分符,G可以在FORMAT_model中出现多次。9G999G9
C 在指定位置返回ISO货币符号。C可以在FORMAT_model中出现多次。C99
L 在指定位置上返回本地货币符号。 L99
V 返回一个被乘以10的N次方的数值,这里N是V后边9的个数。99V99
EEEE 使用科学记数法返回该数值。9.99EEEE
RM 使用大写的罗马数字表示返回该数值。 RM
rm 使用小写的罗马数字表示返回该数值。 rm
FM 返回不含前导和后继空格的数值。 FM99.09
格式控制符位数一定要大于或等于NUMBER的位数,不能小于。
用RR解决跨世纪问题:
小于50的认为是1950-2050
大于50的认为是1951-1999
数字和日期是不能相互转换的。
ASCIISTR(string)
返回只包含有效的SQL字符和斜线的字符串。string中的任何无效的字符将被转换为一个相当的数字,在之前加上斜线。
BIN_TO_NUM(num[,num]...)
将一位矢量转换位相当的数字。它的参数是一系列逗号隔开的NUMS,每一个都必须是0或1。
例如BIN_TO_NUM(1,0,1,1)将返回11,因为11的二进制表示是1011。当使用分组集合和GROUP BY 子句时该函数很有用。 CHARTOROWID(x)函数,
将字符串转换成一个ROWID类型的值,注意格式必须采用ROWID数据类型格式,即“数据块号:行序号:数据文件号”。
COMPOSE(string)
以相同字符集中完全规格化Unicode形式返回string.string可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB类型。
DECOMPOSE(string)
返回一个Unicode字符串。它是string的规范分解。string可以是CHAR、VARCHAR2、 NCHAR、NVARCHAR2、CLOB或NCLOB类型。
FROM_TZ(timestamp,timezone)
返回一个TIMESTAMP WITH TIMEZONE 类型值。它将TIMESTAMP(没有时区信息)和提供的TIMEZONE组合在一起。
HEXTORAW(string)
将由STRING表示的二进制数值转换为一个RAW数值。STRING应该包含十六进制值。STRING中的每两个字符表示结果RAW中的一个字节。HEXTORAW和RAWTOHEX互为反函数。
NUMTODSINTERVAL(x,unit)
将X转换为INTERVAL DAY TO SECOND 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是''DAY''、''HOUR''、''MINUTE''、''SECOND''之一。unit是不区分大小写的,返回值的缺省精度为9。
NUMTOYMINTERVAL(x,unit)
将X转换成INTERVAL YEAR TO MONTH 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是''YEAR''或''MONTH''之一。unit是不区分大小写的,返回值的缺省精度为9。
REFTOHEX(refvalue)
返回一REF refvalue的十六进制表示。
RAWTOHEX(rawvalue)
将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。
RAWTONHEX(rawvalue)
将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。
RAWTONHEX返回值是NVARCHAR2类型而不是VARCHAR2类型。
ROWIDTOCHAR(rowid)函数,将ROWID类型值转换成字符串。与CHARTOROWID互为反函数。
ROWIDYONCHAR(rowid) 与ROWIDTOCHAR类似,返回类型是NCHAR,而不是CHAR。
TO_CLOB(string)
将string转换为CLOB。string可以是文字或另一个LOB列。如果参数包含NCHAR数据,它被转换为数据库字符集
TO_DSINTERVAL(string[,nlsparams])
将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为 INTERVAL DAY TO SECOND 类型。如果
选定nlsparams,则nlsparams只能包含小数点和千分位字符的NLS_NUMERIC_CHARARCTERS表示。
TO_LOB(long_column)
将long_column转换成LOB。这个函数用于将LONG和LONG RAW分别转换为CLOB和LOB。
TO_MULTI_BYTE(string)
返回将所有单字节字符替换为等价的多字节字符的STRING。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_SINGLE_BYTE 互为反函数。
TO_NCHAR
和TO_CHAR相似,结果是属于国家字符集而不是数据库字符集。
TO_NCLOB(string)
将STRING转换为NCLOB。STRING可以是文字或另一LOB列。
TO_SINGLE_BYTE(string)
返回将所有双字节字符替换为等价的单字节字符的STRING。。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_MULTI_BYTE 互为反函数。
TO_TIMESTAMP(string[,format[,nlsparams]])
将其参数CHAR或VARCHAR2类型string转换成TIMESTAMP类型。
TO_TIMESTAMP_TZ(string[,format[,nlsparams]])
将其参数CHAR或VARCHAR2类型string转换成 TIMESTAMP WITH TIMEZONE 类型。
TO_YMINTERVAL(string)
将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为INTERVAL YEAR TO MONTH 类型。
TO_YMINTERVAL与TO_DSINTERVAL相似,除了它不能使用NLS参数作为参数并返回YEAR TO MONTH时间间隔而不DAY TO SECOND 时间间隔。