oracle中的INTERVAL函数详解Word格式.docx
- 文档编号:19552079
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:9
- 大小:17.23KB
oracle中的INTERVAL函数详解Word格式.docx
《oracle中的INTERVAL函数详解Word格式.docx》由会员分享,可在线阅读,更多相关《oracle中的INTERVAL函数详解Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
YEARTOMONTH是一样
该处表示有错误,123精度是3了,但系统默认是2,所以该处应该写成INTERVAL'
YEAR(3)或"
3"
改成大于3小于等于9的数值都可以的
5-3'
YEARTOMONTH+INTERVAL'
20'
MONTH=
6-11'
YEARTOMONTH
5年3个月+20个月=6年11个月
与该类型相关的函数:
NUMTODSINTERVAL(n,'
interval_unit'
)
将n转换成interval_unit所指定的值,interval_unit可以为:
DAY,HOUR,MINUTE,SECOND
注意该函数不可以转换成YEAR和MONTH的.
NUMTOYMINTERVAL(n,'
interval_unit可以为:
YEAR,MONTH
(OracleVersion9204,RedHatLinux9.0)
SQL>
selectnumtodsinterval(100,'
DAY'
)fromdual;
NUMTODSINTERVAL(100,'
---------------------------------------------------------------------------
+00000010000:
00:
00.000000000
c/DAY/SECOND
1*selectnumtodsinterval(100,'
SECOND'
)fromdual
/
+00000000000:
01:
40.000000000
c/SECOND/MINUTE
MINUTE'
+00000000001:
40:
c/MINUTE/HOUR
HOUR'
+00000000404:
c/HOUR/YEAR
YEAR'
selectnumtodsinterval(100,'
*
ERRORatline1:
ORA-01760:
illegalargumentforfunction
selectnumtoyminterval(100,'
year'
NUMTOYMINTERVAL(100,'
+000000100-00
c/year/month
1*selectnumtoyminterval(100,'
month'
MONTH'
+000000008-04
时间的计算:
selectto_date('
1999-12-12'
'
yyyy-mm-dd'
)-to_date('
1999-12-01'
)
from
dual;
TO_DATE('
YYYY-MM-DD'
)-TO_DATE('
---------------------------------------------------------------------
11
--可以相减的结果为天.
c/1999-12-12/1999-01-12
1*selectto_date('
1999-01-12'
-323
--也可以为负数的
c/1999-01-12/2999-10-12
2999-10-12'
dual
365193
下面看看INTERVALYEARTOMONTH怎么用.
createtablebb(adate,bdate,cintervalyear(9)tomonth);
Tablecreated.
descbb;
NameNull?
Type
-----------------------------------------------------------------------------
ADATE
BDATE
CINTERVALYEAR(9)TOMONTH
insertintobbvalues(to_date('
1985-12-12'
'
),to_date('
1984-12-01'
),null)
1rowcreated.
select*
bb;
AB
------------------
C
12-DEC-8501-DEC-84
updatebbsetc=numtoyminterval(a-b,'
);
1rowupdated.
select*frombb;
+000000376-00
--直接将相减的天变成年了,因为我指定变成年的
selecta-b,c
A-B
----------
376
insertintobbvalues(null,null,numtoyminterval(376,'
));
ABC
--------------------------------------------------------------
12-DEC-8501-DEC-84+000000376-00
+000000031-04
insertintobbvalues(null,null,numtoyminterval(999999999,'
---------------------------------------------------------------------------------------
+999999999-00
========================
INTERVALYEARTOMONTH类型2个TIMESTAMP类型的时间差别。
内部类型是182,长度是5。
其中4个字节存储年份差异,存储的时候在差异上加了一个0X80000000的偏移量。
一个字节存储月份的差异,这个差异加了60的偏移量。
ALTERTABLETestTimeStampADDEINTERVALYEARTOMONTH;
updatetestTimeStampsete=(selectinterval'
5'
year+interval'
10'
monthyearfromdual);
已更新3行。
commit;
提交完成。
selectdump(e,16)
testTimeStamp;
DUMP(E,16)
---------------------------------------------
Typ=182Len=5:
80,0,0,5,46
年:
0X80000005-0X80000000=5
月:
0x46-60=10
INTERVALDAYTOSECOND数据类型
{integer|integertime_expr|time_expr}'
{{DAY|HOUR|MINUTE}[(leading_precision)]
|SECOND[(leading_precision[,fractional_seconds_precision])]}
[TO{DAY|HOUR|MINUTE|SECOND[(fractional_seconds_precision)]}]
leading_precision值的范围是0到9,默认是2.time_expr的格式为:
HH[:
MI[:
SS[.n]]]orMI[:
SS[.n]]orSS[.n],n表示微秒.
该类型与INTERVALYEARTOMONTH有很多相似的地方,建议先看INTERVALYEARTOMONTH再看该文.
范围值:
HOUR:
0to23
MINUTE:
0to59
SECOND:
0to59.999999999
45:
12:
10.222'
DAYTOSECOND(3)
4天5小时12分10.222秒
12'
DAYTOMINUTE
4天5小时12分
4005'
DAY(3)TOHOUR
400天5小时,400为3为精度,所以"
DAY(3)"
注意默认值为2.
400'
DAY(3)
400天
11:
10.2222222'
HOURTOSECOND(7)
11小时12分10.2222222秒
HOURTOMINUTE
11小时20分
HOUR
10小时
10:
22'
MINUTETOSECOND
10分22秒
MINUTE
10分
DAY
4天
25'
25小时
40'
40分
120'
HOUR(3)
120小时
30.12345'
SECOND(2,4)
30.1235秒,因为该地方秒的后面精度设置为4,要进行四舍五入.
DAY-INTERVAL'
240'
HOUR=INTERVAL'
10-0'
DAYTOSECOND
20天-240小时=10天0秒
==================
INTERVALDAYTOSECOND类型存储两个TIMESTAMP之间的时间差异,用日期、小时、分钟、秒钟形式表示。
该数据类型的内部代码是183,长度位11字节:
l4个字节表示天数(增加0X80000000偏移量)
l小时、分钟、秒钟各用一个字节表示(增加60偏移量)
l4个字节表示秒钟的小时差异(增加0X80000000偏移量)
以下是一个例子:
altertabletestTimeStampaddfintervaldaytosecond;
表已更改。
updatetestTimeStampsetf=(selectinterval'
day+interval'
secondfromdual);
selectdump(f,16)
DUMP(F,16)
--------------------------------------------------------------------------------
Typ=183Len=11:
80,0,0,5,3c,3c,46,80,0,0,0
日期:
小时:
60-60=0
分钟:
秒钟:
70-60=10
秒钟小数部分:
0X80000000-0X80000000=0
selectdate'
2010-01-01'
+interval'
21'
yearfromdual
year(4)tomonthfromdual
100'
monthfromdual
day
(2)fromdual
12'
daytohourfromdual
12:
3'
daytominutefromdual
3:
daytosecondfromdual
1:
2:
hourfromdual
2'
hourtominutefromdual
hourtosecondfromdual
minutetosecondfromdual
转换函数:
selectnumtoyminterval(13,'
),numtodsinterval(100,'
hour'
PLSQL中的定义及调用:
declare
v_dtsintervaldaytosecond:
=interval'
daytosecond;
v_dddate:
=date'
;
begin
executeimmediate'
altersessionsetnls_date_format='
'
yyyy-mm-ddhh24:
mi:
ss'
selectv_dd+v_dtsintov_ddfromdual;
dbms_output.put_line(v_dd);
end;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 中的 INTERVAL 函数 详解