next_day函數用法

在Oracle是提供了next_day求指定日期的下一個日期.



語法 : next_day( date, weekday )

date is used to find the next weekday.
weekday is a day of the week (ie: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY)

可用於:
Oracle 9i, Oracle 10g, Oracle 11g

 

舉例:

可以求出當前日期的下個星期一。

select next_day( sysdate, 'MONDAY') from dual;

使用方法並不複雜,主要注意如下:

  1)  當第二個參數傳的星期數比現有星期數小的時候,會返回下一個星期的日期;當第二個參數所傳的星期數比 現有的星期數大的時候,則會返回本週的相應星期日期。

 

例如:

ps:請注意如下紅色字體。

SQL> select sysdate from dual;

SYSDATE
-------------------
2010-12-30 19:30:26

1 row selected.

Elapsed: 00:00:00.01

 

SQL> select next_day(sysdate,'tuesday') from dual;

NEXT_DAY(SYSDATE,'T
-------------------
2011-01-04 18:57:37

1 row selected.

Elapsed: 00:00:00.01
SQL>
SQL>  select next_day(sysdate,'MONDAY') from dual;

NEXT_DAY(SYSDATE,'M
-------------------
2011-01-03 18:58:45

1 row selected.

Elapsed: 00:00:00.00
SQL> select next_day(sysdate,'WEDNESDAY') from dual;

NEXT_DAY(SYSDATE,'W
-------------------
2011-01-05 18:59:15

1 row selected.

Elapsed: 00:00:00.00
SQL> select next_day(sysdate,'THURSDAY') from dual;

NEXT_DAY(SYSDATE,'T
-------------------
2011-01-06 18:59:30

1 row selected.

Elapsed: 00:00:00.00
SQL> select next_day(sysdate,'FRIDAY') from dual;

NEXT_DAY(SYSDATE,'F
-------------------
2010-12-31 18:59:43

1 row selected.

Elapsed: 00:00:00.00


SQL> select next_day(sysdate,'SATURDAY') from dual;

NEXT_DAY(SYSDATE,'S
-------------------
2011-01-01 19:00:19

1 row selected.

Elapsed: 00:00:00.01


SQL> select next_day(sysdate,'SUNDAY') from dual;

NEXT_DAY(SYSDATE,'S
-------------------
2011-01-02 19:00:37

1 row selected.

Elapsed: 00:00:00.00

 

2)好的方法

統計上個星期日到上個星期六的總和,

具體寫法:

l_begin_date ~ l_end_date:

            NEXT_DAY(SYSDATE-7*2-1,'sunday') ~ NEXT_DAY(SYSDATE-7-2,'saturday')

 

然後再在程序中作判斷:

IF l_begin_date>NEXT_DAY(SYSDATE-7*2-1,'sunday')
    --限制統計開始日期必須是週日
    OR TO_CHAR(l_begin_date,'d')<>1
    --限制統計結束日期必須是週六
    OR TO_CHAR(l_end_date,'d')<>7
    --限制開始日期和結束日期時間間隔必須是一週
    OR l_end_date-l_begin_date<>6

THEN
        raise_application_error(-20503,'you enter error parameter');
    END IF;

    --每週一跑數據,其它時候空跑
    IF TO_CHAR(SYSDATE,'d')=2
    THEN

         *****************

   end IF;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章