假设为[s1,e1]和[s2,e2],并假设下列事实存在:
1、s1<s2
2、s1>e1
3、s2>e2
此时,如果s2落在s1,e1区间内,为重合。既s2<e1。
这样的话需要给出s2、e1为null时的逻辑,否则无法进行判断。
比如声明s2为null时为sysdate等。
1、s1<s2
2、s1>e1
3、s2>e2
此时,如果s2落在s1,e1区间内,为重合。既s2<e1。
这样的话需要给出s2、e1为null时的逻辑,否则无法进行判断。
比如声明s2为null时为sysdate等。
3、s2<e2
这里应该是这样,上面错了。不过影响不大
2 (TO_DATE('2003-01-12','YYYY-MM-DD')-TO_DATE('2002-11-11','YYYY-MM-DD'))*(TO_DATE('2003-01-12','
YYYY-MM-DD')-TO_DATE('2003-03-03','YYYY-MM-DD'))),1,'FALSE','TRUE') FROM DUAL;DECO
----
TRUE[2002-10-22,2002-11-10]和[2002-11-11,2003-3-3]:SQL> SELECT DECODE(SIGN(
2 (TO_DATE('2002-11-10','YYYY-MM-DD')-TO_DATE('2002-11-11','YYYY-MM-DD'))*(TO_DATE('2002-11-10','
YYYY-MM-DD')-TO_DATE('2003-03-03','YYYY-MM-DD'))),1,'FALSE','TRUE') FROM DUAL;DECOD
-----
FALSE
假设有时间交叉,则DATE2或DATE4肯定满足 DATE3<=DATE2<=DATE4 或
DATE1<=DATE4<=DATE2
我上面写得只包含第一种情况,即DATE3<=DATE2<=DATE4
2 (TO_DATE('2003-01-12','YYYY-MM-DD')-TO_DATE('2002-11-11','YYYY-MM-DD'))*(TO_DATE('2003-01-12',' 3 YYYY-MM-DD')-TO_DATE('2003-03-03','YYYY-MM-DD'))),1,
4 DECODE(SIGN(
5 (TO_DATE('2003-03-03','YYYY-MM-DD')-TO_DATE('2002-10-22','YYYY-MM-DD'))*(TO_DATE('2003-03-03',' 6 YYYY-MM-DD')-TO_DATE('2003-01-12','YYYY-MM-DD'))),1,'FALSE','TRUE'),'TRUE') FROM DUAL;DECOD
-----
TRUE测试2:[2002-10-22,2002-11-10]和[2002-11-11,2003-3-3]:SQL> SELECT DECODE(SIGN(
2 (TO_DATE('2002-11-10','YYYY-MM-DD')-TO_DATE('2002-11-11','YYYY-MM-DD'))*(TO_DATE('2002-11-10',' 3 YYYY-MM-DD')-TO_DATE('2003-03-03','YYYY-MM-DD'))),1,
4 DECODE(SIGN(
5 (TO_DATE('2003-03-03','YYYY-MM-DD')-TO_DATE('2002-10-22','YYYY-MM-DD'))*(TO_DATE('2003-03-03',' 6 YYYY-MM-DD')-TO_DATE('2002-11-10','YYYY-MM-DD'))),1,'FALSE','TRUE'),'TRUE') FROM DUAL;DECOD
-----
FALSE这样就可以了
没有下限的!!!!!
同样对没有上限的设成9999-12-12。SQL> SELECT DECODE(SIGN(
2 (TO_DATE('2002-11-10','YYYY-MM-DD')-TO_DATE('0001-01-01','YYYY-MM-DD'))*(TO_DATE('2002-11-10',' 3 YYYY-MM-DD')-TO_DATE('2003-03-03','YYYY-MM-DD'))),1,
4 DECODE(SIGN(
5 (TO_DATE('2003-03-03','YYYY-MM-DD')-TO_DATE('2002-10-22','YYYY-MM-DD'))*(TO_DATE('2003-03-03',' 6 YYYY-MM-DD')-TO_DATE('2002-11-10','YYYY-MM-DD'))),1,'FALSE','TRUE'),'TRUE') FROM DUAL;DECOD
-----
TRUE