Oracle查询数据库中年龄段符合区间的数据,避免数据量过大执行出错。

数据库简单结构

字段类型
idvarchar2
namevarchar2
birthdate

做项目时,需要实现导入年龄段在15~25岁的人员,但是一直无法准确的导入。所以只能手写日期,SQL语句如下

SELECT  id, name FROM user 
WHERE birth>=to_date('1997-05-24','yyyy-mm-dd') 
AND birth<= to_date('2007-05-04','yyyy-mm-dd');

虽然还没有需要再导入一次别的年龄段,但是如果每次手写又很麻烦,在网上找到可以使用以下方法:

SELECT  id, name FROM user 
WHERE months_between(sysdate ,BIRTH_TIME)/12<=25 
and months_between(sysdate,BIRTH_TIME)/12>=15

这样就可以传入参数实现SQL复用了。


有一些需要注意的事项: sysdate返回的日期格式是带时间的,如2022-5-24 17:13:00 ,如果不希望时间也参与计算,可以在外层嵌套trunc(sysdate,'dd')。
SELECT  id, name FROM user 
WHERE months_between(trunc(sysdate ,'dd') ,BIRTH_TIME)/12<=25 
AND months_between(trunc(sysdate ,'dd'),BIRTH_TIME)/12>=15

最重要的是,如果数据量大在执行的时候到了另一天,那么数据就不对了,所以最好是在执行方法的时候单例获取一个固定的时间,然后作为参数传入SQL语句中,保证执行的结果的正确性。
所以上面使用SQL服务端的sysdate作为时间判断是不太合适的,可以将sysdate换为传入参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值