Db2:日付から異なる値を戻す関数(THIS_WEEK,THIS_MONTH,NEXT_WEEK,NEXT_MONTH 他)

Db2 11.1の新機能から、日付がらみの新しい組込み関数の紹介を続けます。

Db2 11.1では、日付・時刻操作に関して、Oracle, Netteza, PostgreSQL, MySQLなど、他のデータベース製品で使用されるSQLも簡単にDb2環境で実行できるよう、SQLの互換性がより強化されています。


参考(前回までの日付がらみの新しい組込み関数に関する記事) 
[Db2:日付,時刻の操作を行う関数(NOW,EXTRACT)](https://qiita.com/camp07/items/c07c662bfbbdbad73f24)
[Db2:日付,時刻の操作を行う関数(DATE_PART)](https://qiita.com/camp07/items/8bec02c01f6d7968d00a)
[Db2:日付,時刻の操作を行う関数(DATE_TRUNC)](https://qiita.com/camp07/items/12ecc353d3b8acce6733)
[Db2:その月から特定の日を取り出す関数(DAYOFMONTH,FIRST_DAY,DAYS_TO_END_OF_MONTH)](https://qiita.com/camp07/items/86966b742e1f6a320985)
[Db2:日付操作で任意の日を加える(ADD_DAYS,ADD_MONTHS 他)]
(https://qiita.com/camp07/items/9f1efda346f6b5556a8e)


# 日付から異なる値を戻す関数

以下の4つの関数は、日付からそれぞれ異なる値を戻します。

THIS_WEEK - 指定した日付の週の最初の日を戻す
THIS_MONTH - 指定した日付の月の初日を戻す
THIS_QUARTER - 指定した日付の四半期の最初の日を戻す
THIS_YEAR - 指定した日付の年の最初の日を戻す


Db2のSAMPLEデータベースに接続して、実行してみましょう。


this_week.sqlというテキストファイルにSQLを書いて保管します。

(this_week.sql)

```
WITH DATES(FUNCTION, RESULT) AS 
  ( 
  VALUES
    ('CURRENT DATE   ',NOW),
    ('THIS_WEEK      ',THIS_WEEK(NOW)),
    ('THIS_MONTH     ',THIS_MONTH(NOW)),
    ('THIS_QUARTER   ',THIS_QUARTER(NOW)),
    ('THIS_YEAR      ',THIS_YEAR(NOW))
  )
SELECT * FROM DATES;
```

Db2のSAMPLEデータベースに接続して、このSQLを実行します。



```
db2 -tvf this_week.sql
```


本日9月21日であるため、以下の結果が戻ります。

```


FUNCTION        RESULT
--------------- --------------------------
CURRENT DATE    2018-09-21-10.28.26.600000
THIS_WEEK       2018-09-16-00.00.00.000000
THIS_MONTH      2018-09-01-00.00.00.000000
THIS_QUARTER    2018-07-01-00.00.00.000000
THIS_YEAR       2018-01-01-00.00.00.000000

  5 レコードが選択されました。
```




# それぞれNEXT関数もあり


この4つには、はそれぞれに応じたNEXT関数もあります。
NEXT関数は、次の週・月・四半期・年を戻します。

NEXT_WEEK - 指定した日付の翌週の最初の日を戻す
NEXT_MONTH - 指定した日付の翌月の初日を戻す
NEXT_QUARTER - 指定した日付の次の四半期の最初の日を戻す
NEXT_YEAR - 指定した日付の翌年の最初の日を戻す


Db2のSAMPLEデータベースに接続して、実行してみましょう。


next_week.sqlというテキストファイルにSQLを書いて保管します。

(next_week.sql)

```
WITH DATES(FUNCTION, RESULT) AS 
  ( 
  VALUES
    ('CURRENT DATE   ',NOW),
    ('NEXT_WEEK      ',NEXT_WEEK(NOW)),
    ('NEXT_MONTH     ',NEXT_MONTH(NOW)),
    ('NEXT_QUARTER   ',NEXT_QUARTER(NOW)),
    ('NEXT_YEAR      ',NEXT_YEAR(NOW))
  )
SELECT * FROM DATES;
```

Db2のSAMPLEデータベースに接続して、このSQLを実行します。



```
db2 -tvf next_week.sql
```


本日9月21日であるため、以下の結果が戻ります。

```


FUNCTION        RESULT
--------------- --------------------------
CURRENT DATE    2018-09-21-10.39.27.586000
NEXT_WEEK       2018-09-23-00.00.00.000000
NEXT_MONTH      2018-10-01-00.00.00.000000
NEXT_QUARTER    2018-10-01-00.00.00.000000
NEXT_YEAR       2019-01-01-00.00.00.000000

  5 レコードが選択されました。
```




#参考資料



- [Db2 11.1 Knowledge Center](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.welcome.doc/doc/welcome.html)

    - [SQL の互換性の機能拡張](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0054107.html)
        - 新しい組み込み集約関数およびスカラー関数
    - [THIS_WEEK スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061977.html)

    - [THIS_MONTH スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061968.html)


    - [THIS_QUARTER スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061978.html)


    - [THIS_YEAR スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061963.html)

    - [NEXT_WEEK スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061958.html)

    - [NEXT_MONTH スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061962.html)


    - [NEXT_QUARTER スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061959.html)


    - [NEXT_YEAR スカラー関数](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061979.html)