oracle中那个⽇期怎么相减_oracle⽇期加减⽅法
最近需要写⼀个时间的相加减的sql语句,于是就上⽹看了下相关的知识,然后⾃⼰整理了下⼀些 关于时间加减和获取相关时间的知识!
加法
select sysdate,add_months(sysdate,12) from dual;      --加1年
select sysdate,add_months(sysdate,1) from dual;        --加1⽉
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1⼩时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1秒
减法则相反⽤减的就OK了
但是我发现⼀个问题,就是我⽤系统⽇期减去系统⽇期会等于0,但是如果是减去⼀个to_date()的⽇期格式就不是等于0了,我也不知道为什么o(╯□╰)o
select sysdate,sysdate-sysdate from dual;--结果是:2011-7-13 16:45:35 和 0
select sysdate,sysdate-to_date('2011-7-1 16:28:00','yyyy-mm-dd HH24:MI:SS') from dual;
--结果是2011-7-13 16:46:31  和  12.0128587962963
⽇期与⽇期之间不能相加 ,但是⽇期与数字就可相加SQL> select sysdate+1 from dual;
⽇期与⽇期可以相减 SQL>  select  sysdate-sysdate from dual;
Last_Day(D)返回包含⽇期D的⽉份的最后⼀天的⽇期,这个要注意时间要是默认格式的,不然会报错的!
select * from nls_session_parameters where parameter=upper('nls_date_format');--查出系统默认格式是:DD-MON-RR
select last_day('02-12⽉-09') from dual; --正确(为什么要加个“⽉”,我也不知道,反正就是那个“DD-MON-RR”格式的就是要这样写)
select last_day('20090202') from dual;--错误,不能⾃动将字符转换成date
alter session set nls_date_format='yyyymmdd'; --修改默认格式
select last_day('20090202') from dual;--设置了默认格就可以运⾏了
Months_Between(D1,D2)返回D1、D2之间的⽉份数⽬,D1
select Months_Between('02-12⽉-09','02-2⽉-09') from dual; --结果:10
select Months_Between('02-2⽉-09','02-12⽉-09') from dual; --结果:-10
New_Time(D,Z1,Z2)        返回时区Z1⾥时间为D时Z2时区的时间
select New_Time('02-12⽉-11','AST','HST') from dual;--返回:2011-12-1 18:00:00
在区域 z1 中的⽇期和时间为 d 时,函数将返回区域 z2 中的⽇期和时间。变元 z1 和 z2 可以是以下任何⼀个⽂本字符串:
AST 或 ADT ⼤西洋标准时间或夏令时间
BST 或 BDT ⽩令海标准时间或夏令时间
CST 或 CDT 中央标准时间或夏令时间
EST 或 EDT 东部标准时间或夏令时间
GMT 格林威治标准时间
HST 或 HDT 阿拉斯加 - 夏威夷标准时间或夏令时间
MST 或 MDT ⼭区标准时间或夏令时间
NST 纽芬兰标准时间
PST 或 PDT 太平洋标准时间或夏令时间
YST 或 YDT 育空标准时间或夏令时间
NEXT_DAY(D, X)  时间点D开始,下⼀個星期⼏的⽇期(星期⽇=1 星期⼀= 2 星期⼆=3,星期三=4  星期四=5  星期五 = 6  星期六 = 7)。返回值具有与变元D 相同的⼩时数、分钟数和秒数构成。
例如:select NEXT_DAY('18-7⽉-11', 2) from dual;--返回:2011-7-25也就是周⼀
Round(D,F)  ⽇期D按照格式F进⾏舍⼊,对⽇期的四舍五⼊运算,⽉的四捨五⼊以每⽉的15号为准 ,年的四捨五⼊以每年6⽉为准。
oracle四舍五入
select sysdate, ROUND(sysdate,'year') aa from dual;  --返回:2012-1-1
F可以是以下⼏个:
SS 秒;MI 分钟;HH ⼩时;DD /day  天 ;MM /mouth    ⽉份;YY/year    年
如果是⽤day, nouth,year ⼀定要⽤⼩写才⾏
Trunc(D,F)  按照格式F截断时间D ,trunc也可以对于number进⾏截断,它和round类似,区别是,round是四舍五⼊的,但是trunc是直接截断,例如
select sysdate, TRUNC(sysdate,'yyyy') aa from dual;  --返回:2011-1-1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。