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! ORACLE sql oracle不定期断开,导致pb程序连接不上 询问 什么工具可以用来编写表结构设计文档 求助:日期格式问题,非常简单,但我想不出来 ORACLE配置问题 急啊!!!! linux下用root无法以sysdba登陆 在PLSQL DEVELOPER里,有写SQL语句的地方吗? 用PB和Oracle开发厂里的无纸化办公系统,请问用什么版本搭配最好? pb8.0在服务器上能连上数据库,可是到工作站上却连不上,错误如下: 请问这条sql语句怎么优化,怎么优化 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')