取生日的SQL的一点感想

背景:修改别人作品的BUG。

这是个取生日开始日期与结束日期“月日”之间的工作。

未修改之前的代码如下:

--开始日期与结束日期同年
AND (((EXTRACT(MONTH FROM BIRTHDATE) > EXTRACT(MONTH FROM TO_DATE('" | &startDate | "','YYYY-MM-DD'))
AND EXTRACT(MONTH FROM BIRTHDATE) < EXTRACT(MONTH FROM TO_DATE('" | &endDate | "','YYYY-MM-DD')))

OR (EXTRACT(MONTH FROM BIRTHDATE) = EXTRACT(MONTH FROM TO_DATE('" | &startDate | "','YYYY-MM-DD'))
AND EXTRACT(DAY FROM BIRTHDATE) > EXTRACT(DAY FROM TO_DATE('" | &startDate | "','YYYY-MM-DD')))

OR (EXTRACT(MONTH FROM BIRTHDATE) = EXTRACT(MONTH FROM TO_DATE('" | &endDate | "','YYYY-MM-DD'))
AND EXTRACT(DAY FROM BIRTHDATE) < EXTRACT(DAY FROM TO_DATE('" | &endDate | "','YYYY-MM-DD')))))

--开始日期与结束日期不同年(代码省略)
--对于2.29生日的人,又重新UNION ALL了一堆SQL(代码省略)


修改后的代码如下:


--开始日期与结束日期同年
AND (TO_CHAR(BIRTHDATE, 'MM-DD') BETWEEN
TO_CHAR(TO_DATE('" | &startDate | "','YYYY-MM-DD'), 'MM-DD') AND
TO_CHAR(TO_DATE('" | &endDate | "','YYYY-MM-DD'), 'MM-DD'))

--开始日期与结束日期不同年
AND ((TO_CHAR(BIRTHDATE, 'MM-DD') BETWEEN
TO_CHAR(TO_DATE('" | &startDate | "','YYYY-MM-DD'), 'MM-DD') AND '12-31') OR
(TO_CHAR(BIRTHDATE, 'MM-DD') BETWEEN '01-01' AND
TO_CHAR(TO_DATE('" | &endDate | "','YYYY-MM-DD'), 'MM-DD')))

--对于生日2.29的人以上两句完全可以搞定



这是个从EXTRACT()函数到TO_CHAR()函数的过程,记此文以祭奠俺开始对TO_CHAR()函数的无知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值