oracle2个日期的比较。。。。在线等 出生日期 BDATE开户日期 ODATE以客户开户日期和出生日期做比对,客户在开户当日的年龄小于16岁的作为统计这个SQL怎么写啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接用开户日-生日 select 20120320-19960101 from dual 大于160000就行了 select count(*) from 表名 where ODATE-BDATE <16 select count (1) from tableName where months_between(ODATE,BDATE) < 16*12 select (to_date('开户日期','yyyymmddhh24miss') - to_date(出生日期 ,'yyyymmddhh24miss'))/365 from dual; select count(1) from tablewhere ODATE > (BDATE + 365 * 16) select *from tbnamewhere bdate-odate<365*16 测试数据:CREATE TABLE T162( ID NUMBER(4), BDate DATE, ODate DATE);--符合条件的记录INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1990-01-30', 'YYYY-MM-DD'));INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1991-01-30', 'YYYY-MM-DD'));--不符合条件的记录INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1997-01-30', 'YYYY-MM-DD'));INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1998-01-30', 'YYYY-MM-DD'));测试结果: 如果用365测试的话 有bug 还有一年366天的年份呢? 可能刚好就差这2天满16年 生日:1996-03-24 开户日:2012-03-21--实际上还差3天 但是以上面的测试都可以通过超过16select (date'2012-03-21'-date'1996-03-24')/365 c_date from dual c_date-----------------------1 16.0027397260274--直接算差数 小于160000 不能开户select 20120321-19960324 c_date from dual c_date--------------------1 159997 oracle 并发 大量数据(成千上万 )需要修改时候怎么处理? 真希望这样的高手能到csdn社区来 调存储过程不能带SCHEMA??? 数据库左联接问题,为何WHERE条件中不能添加右边表的查询条件? 关于触发器的问题 询问CASE WHEN的问题 请教!~如何一次执行两个Select语句? 在Oracle内如何测试存储过程? 推荐学习pro*c的好书?最好说明书名,出版社,作者 求出某月中签到最多一天的次数 问下 sequence 的问题 dba_segments表中bytes字段很神奇
select count (1) from tableName where months_between(ODATE,BDATE) < 16*12
where ODATE > (BDATE + 365 * 16)
from tbname
where bdate-odate<365*16
(
ID NUMBER(4),
BDate DATE,
ODate DATE
);
--符合条件的记录
INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1990-01-30', 'YYYY-MM-DD'));
INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1991-01-30', 'YYYY-MM-DD'));
--不符合条件的记录
INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1997-01-30', 'YYYY-MM-DD'));
INSERT INTO T162 VALUES(1, to_date('1980-01-30', 'YYYY-MM-DD'), to_date('1998-01-30', 'YYYY-MM-DD'));测试结果:
select (date'2012-03-21'-date'1996-03-24')/365 c_date from dual c_date
-----------------------
1 16.0027397260274
--直接算差数 小于160000 不能开户
select 20120321-19960324 c_date from dual c_date
--------------------
1 159997