logo 西林@生存 - 骑猪闯天下!
你能准确的说出一个月前的日期或一个月后的日期吗?
2006-11-30 22:05:00 By:xling

相信大部份做程序员的同志对该问题都是含糊而过。

但是这却实是一个值得注意的问题,比如说让你统计当前日期向前的一个月内的销售总和,或当前日期向后一个月内的销售总和,你会怎么做呢?简单的ADD_MONTHS?

看看下图上的信息1030和1031的一个月后的日期都是1130:

在接着看,1130的一个月前的日期却是1031:


为了说明问题的严重性,下面我来举个例子:

CREATE TABLE TST1(
    UPD_DATE DATE,
    QTY NUMBER
)

BEGIN
  INSERT INTO TST1 VALUES (TO_DATE('20061030','YYYYMMDD'),300);
  INSERT INTO TST1 VALUES (TO_DATE('20061031','YYYYMMDD'),300);
  INSERT INTO TST1 VALUES (TO_DATE('20061101','YYYYMMDD'),300);
  INSERT INTO TST1 VALUES (TO_DATE('20061130','YYYYMMDD'),300);
  COMMIT;
END;

现在要取出一个月后(包括当前日期)的销售和:

SELECT
   O.UPD_DATE,O.QTY,
   SUM(A.QTY) AS NEXT_MONTH_QTY,
   ADD_MONTHS(O.UPD_DATE,1) AS NEXT_MONTH_DATE
FROM
  TST1 O LEFT JOIN
  TST1 A ON A.UPD_DATE BETWEEN O.UPD_DATE AND ADD_MONTHS(O.UPD_DATE,1)
GROUP BY O.UPD_DATE,O.QTY 
ORDER BY UPD_DATE

结果如图所示:

20061030的一个月后的销售量和为:1200,按理来说,20061130的一个月前(包括
20061130)的销售量和也该为:1200,但是真的是这样的吗?下面取出一个月前(包括)的销售量和:

SELECT
   O.UPD_DATE,O.QTY,
   SUM(A.QTY) AS NEXT_MONTH_QTY,
   ADD_MONTHS(O.UPD_DATE,-1) AS PRE_MONTHS_DATE
FROM
  TST1 O LEFT JOIN
  TST1 A ON A.UPD_DATE BETWEEN ADD_MONTHS(O.UPD_DATE,-1) AND O.UPD_DATE
GROUP BY O.UPD_DATE,O.QTY 
ORDER BY UPD_DATE


结果是什么?少了300!为什么?因为20061130的一个月前的日期是:20061031,而没有把20061030算进来!

有出入了吧!

转我的贴,写你的名,是一种可耻的行为!请不要让我BS你!
阅读全文 | 回复(0) | 引用通告 | 编辑

发表评论:

    密码:
    主页:
    标题:
    页面数据正在载入...
<<  < 2007 - 11 >  >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Placard
1,長江後浪推前浪,前浪死在沙灘上!
2,有了钱的男人,才是真正的男人...
3,不要以为把你的小JJ埋进土里,你就rape了整个地球;不要以为把你的小JJ朝向天空,你就rape了整个宇宙!
Logon System
Search
Info about this blog
Others
myDream
bxna 京ICP备05002321号