plsql中求兩個日期間隔天數 我想在where條件中加上表中某字段日期的值大于當前系統日期,比如兩天,和字段的日期值等于系統當前日期的后一天。就是關于兩個日期間隔天數的問題,希望大家踴躍發言啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Oracle计算时间差表达式 --取第几天的数据。select * from table where trunc(sysdate)-trunc(cr)=1; select * from table where trunc(sysdate)-trunc(cr)=2; select * from table where trunc(sysdate)-trunc(cr)=8; --获取两时间的相差豪秒数select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;/*相差豪秒数---------- 864010001 row selected*/--获取两时间的相差秒数select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;/*相差秒数---------- 864011 row selected*/--获取两时间的相差分钟数select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) * 24 * 60) 相差分钟数 FROM DUAL;/*相差分钟数---------- 14411 row selected*/--获取两时间的相差小时数select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24) 相差小时数 FROM DUAL;/*相差小时数---------- 251 row selected*/--获取两时间的相差天数select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) 相差天数 FROM DUAL;/*相差天数---------- 21 row selected*/--获取两时间月份差select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 + EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) monthsfrom dual;/*MONTHS---------- 131 row selected*/--获取两时间年份差select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual;/*YEARS---------- 11 row selected*/ 直接相减select to_date('2009-9-16 15:14:35','YYYY-MM-DD HH24:MI:SS')- to_date('2009-9-14 10:14:35','YYYY-MM-DD HH24:MI:SS')from dual to_char(table_date,'yyyymmdd')>to_char(sysdate,'yyyymmdd')+ 2to_char(table_date,'yyyymmdd')=to_char(sysdate,'yyyymmdd')- n如果要精确比较to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'),比较前后格式一致就可以了。可以到网上看看日期函数,呵呵! 這樣會報錯呀,“OAR—01722:invalid number” trunc(column1) = trunc(sysdate) + 2注意你的字段类型,date select pll.need_by_date, to_date(pll.need_by_date,'YYYY-MM-DD')- to_date(sysdate,'YYYY-MM-DD')from apps.po_line_locations_all pllwhere to_char(pll.need_by_date,'yyyy-mm-dd')>to_char(sysdate,'yyyy-mm-dd')+ 1 如果不要where子句,顯示求出的時間天數就是錯的, 如果要where字句,就會報錯。幫忙看看吧,非常感謝啊!! to_char(pll.need_by_date,'yyyy-mm-dd')>to_char(sysdate,'yyyy-mm-dd')+ 1 改成pll.need_by_date>sysdate+1 晕,不该to_date的你to_date了,不该to_char的to_char了..若need_by_date为字符型select pll.need_by_date, to_date(pll.need_by_date,'YYYY-MM-DD')- trunc(sysdate) from apps.po_line_locations_all pll where pll.need_by_date>to_char(sysdate+1,'yyyy-mm-dd') 呵呵,多謝各位,我已經知道了,謝謝wildwave! sqlldr导入csv数据文件到bonus表,这个表必须是空的吗? 用exp导出文件提示如下错误 已知子记录,如何查父记录? 请高手帮帮忙,在Oracle里面怎样通过储存过程解析XMLTYPE数据类型的文件(急) 有什么好办法可以最快的速度将存储在Sybase中的数据导入到Oracle数据库中?? 如何执行字段中的sql语句? 求oracle 7.3.4 for sco UNIX 5.05. 装了三个多小时还没装上,咋办?? 如何在同一台机器上安装不同版本的oracle(8.0.5与8.16)(急) 求助高手,急急急!!关于Oracle的问题! oracle数据展平的问题 急!求一存储过程!
--取第几天的数据。
select * from table where trunc(sysdate)-trunc(cr)=1;
select * from table where trunc(sysdate)-trunc(cr)=2;
select * from table where trunc(sysdate)-trunc(cr)=8; --获取两时间的相差豪秒数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;
/*
相差豪秒数
----------
86401000
1 row selected
*/--获取两时间的相差秒数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;
/*
相差秒数
----------
86401
1 row selected
*/--获取两时间的相差分钟数
select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) * 24 * 60) 相差分钟数 FROM DUAL;
/*
相差分钟数
----------
1441
1 row selected
*/--获取两时间的相差小时数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24) 相差小时数 FROM DUAL;
/*
相差小时数
----------
25
1 row selected
*/--获取两时间的相差天数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) 相差天数 FROM DUAL;
/*
相差天数
----------
2
1 row selected
*/--获取两时间月份差
select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 +
EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months
from dual;
/*
MONTHS
----------
13
1 row selected
*/--获取两时间年份差
select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual;
/*
YEARS
----------
1
1 row selected
*/
直接相减
select to_date('2009-9-16 15:14:35','YYYY-MM-DD HH24:MI:SS')-
to_date('2009-9-14 10:14:35','YYYY-MM-DD HH24:MI:SS')
from dual
to_char(table_date,'yyyymmdd')=to_char(sysdate,'yyyymmdd')- n
如果要精确比较to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'),比较前后格式一致就可以了。可以到网上看看日期函数,呵呵!
這樣會報錯呀,“OAR—01722:invalid number”
to_date(pll.need_by_date,'YYYY-MM-DD')-
to_date(sysdate,'YYYY-MM-DD')
from apps.po_line_locations_all pll
where to_char(pll.need_by_date,'yyyy-mm-dd')>to_char(sysdate,'yyyy-mm-dd')+ 1
如果不要where子句,顯示求出的時間天數就是錯的,
如果要where字句,就會報錯。
幫忙看看吧,非常感謝啊!!
改成
pll.need_by_date>sysdate+1
若need_by_date为字符型
select pll.need_by_date,
to_date(pll.need_by_date,'YYYY-MM-DD')-
trunc(sysdate)
from apps.po_line_locations_all pll
where pll.need_by_date>to_char(sysdate+1,'yyyy-mm-dd')