我最近在做一些SQL查询,我必须将值分成不同的月份(例如12月,1月,2月......)并进行一些比较。然而,我不知所措,想知道每个月的最后一天该用什么。所以我想知道当你定义一个技术上不存在的日期时会发生什么。例如。
WHERE myDate BETWEEN '2016-01-01' AND '2016-02-31' //note Feb 31 does not exist.
我的假设(基于我当前的查询似乎返回了正确的结果)是它只是忽略了不存在的额外日期(例如,在计算日期时,它根本没有常规日期之外的范围的日期)。
这种未定义的行为是我将来可能会遇到麻烦吗?或者有没有更好的方法来做到这一点来覆盖所有基础?
为什么不想使用 LAST_DAY() 函数:
SELECT SYSDATE, trunc(LAST_DAY(SYSDATE)) last,
LAST_DAY(SYSDATE) - SYSDATE days_left FROM DUAL;
输出:
SYSDATE LAST DAYS_LEFT
----------------- ----------------- ----------
03.02.16 18:38:26 29.02.16 00:00:00 26
1 row selected.