使用Oracle SQL选择具有给定范围内生日的员工

使用Oracle SQL选择具有给定范围内生日的员工,第1张

概述为了选择两个月之间的生日,其中FROMDATE和TODATE是预备语句中的一些参数,我想像这样: select p.id as person_id, ... ... where e.active = 1 and extract(month from TODATE) >= extract(month from e.dateOfBirth) and 为了选择两个月之间的生日,其中FROMDATE和TODATE是预备语句中的一些参数,我想像这样:

select  p.ID as person_ID,...   ...  where e.active = 1        and extract(month from TODATE) >= extract(month from e.dateOfBirth)        and extract(month from e.dateOfBirth) >= extract(month from FROMDATE)        order by extract(month from e.dateOfBirth) DESC,extract(day from e.dateOfBirth) DESC

这怎么可以改善,以便与日子一起工作?

解决方法 在Oracle中搜索日期范围的方法不止一种.对于您的场景,我建议您将所涉及的所有日期的月和日元素转换为数字.

select  p.ID as person_ID,...   ...  where e.active = 1  and to_number (to_char( e.dateOfBirth,'MMDD'))       between to_number (to_char( FROMDATE,'MMDD'))              and to_number (to_char( TODATE,'MMDD'))   order by extract(month from e.dateOfBirth) DESC,extract(day from e.dateOfBirth) DESC

这不会使用e.dateOfBirth列上的任何索引.这是否重要取决于您想要运行查询的频率.

@AdeelAnsari评论:

” I don’t like to to_char the predicate,in order to make use of
index”

什么指数? dateOfBirth上的正常索引不会有任何用处,因为索引条目将以year元素引导.因此,它无法帮助您找到12月23日出生的所有人的记录.

基于函数的索引 – 或者在11g中,带有索引的虚拟列(基本上是相同的东西) – 是索引日期列部分的唯一方法.

总结

以上是内存溢出为你收集整理的使用Oracle SQL选择具有给定范围内生日的员工全部内容,希望文章能够帮你解决使用Oracle SQL选择具有给定范围内生日的员工所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/1161725.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存