使用Oracle SQL选择具有给定范围内生日的员工
发布时间:2021-01-14 23:33:58 所属栏目:站长百科 来源:网络整理
导读:为了选择两个月之间的生日,个中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) =
为了选择两个月之间的生日,个中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评述:
什么指数? dateOfBirth上的正常索引不会有任何用处,由于索引条目将以year元素引导.因此,它无法辅佐您找到12月23日出生的全部人的记录. 基于函数的索引 – 可能在11g中,带有索引的假造列(根基上是沟通的对象) – 是索引日期列部门的独一要领. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |