背景:修改别人作品的BUG。
这是个取生日开始日期与结束日期“月日”之间的工作。
未修改之前的代码如下:
修改后的代码如下:
这是个从EXTRACT()函数到TO_CHAR()函数的过程,记此文以祭奠俺开始对TO_CHAR()函数的无知。
这是个取生日开始日期与结束日期“月日”之间的工作。
未修改之前的代码如下:
--开始日期与结束日期同年
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()函数的无知。