【PL/SQL】日付型のあれこれ

2020年9月21日

霊夢
霊夢

今日は日付型の値の扱い方について説明するわね。
それと、ちょっとおまけも。
PL/SQLと言うか、SQLでもだいたい共通よ。

値の扱い方?
うげ。なんだか難しそうだな。

魔理沙
魔理沙

日付型の基本

霊夢
霊夢

値の扱い方の前に、
日付型に値を代入するのを覚えようね。
ついでに、日付型を文字列にするのも書いておくわね。

DECLARE
    AAA DATE;
    BBB DATE;
    CCC CHAR(14);
BEGIN
    AAA := SYSDATE; --(1)
    BBB := TO_DATE('2020/07/17'); --(2)
    CCC := TO_CHAR(AAA, 'YYYYMMDDH24MISS'); --(3)
END;

(1)でシステム日付を代入しているんだな。
(2)で文字列から日付型に変換して代入しているんだな。
(3)で日付型を「年月日時分秒」の文字列にしてるんだな。

魔理沙
魔理沙
霊夢
霊夢

あら、魔理沙
知っていたのね。
それじゃ次、行きましょう!

日数の加減算

霊夢
霊夢

オラクルの日付型で、翌日とか前日を求めるのは
どうやるか知ってる?

「未来はまだ白紙」だよな
ドク・・・。

魔理沙
魔理沙
霊夢
霊夢

(ドクって誰なのよ・・・w)
下にコードを載せるわね。

DECLARE
    AAA DATE := SYSDATE;
    BBB DATE;
    CCC DATE;
BEGIN
    BBB := AAA + 1; --(1)翌日
    CCC := AAA - 1; --(2)前日
END;
霊夢
霊夢

オラクルで前日、翌日は
日付型に「- 1」、「+ 1」でやります。
例えば、「- 7」すると一週間前になるわ。

簡単だな!オイ!

魔理沙
魔理沙

月の加減算

霊夢
霊夢

月の加減算も説明しま~す。
下にコードを載せるわね。

DECLARE
    AAA DATE;
    BBB DATE;
BEGIN
    AAA := ADD_MONTHS(SYSDATE, 12);  --(1)
    BBB := ADD_MONTHS(SYSDATE, -12); --(2)
END;
霊夢
霊夢

「ADD_MONTHS」関数を使いま~す。
(1)は12ヶ月後を求めるわ。
(2)は12ヶ月前を求めるわ。
関数の第2引数で決まるのね!

こりゃまた簡単だな!オイ!

魔理沙
魔理沙

月末の算出

霊夢
霊夢

おまけコーナー♪
月末の算出も下に載せるわね。

DECLARE
    AAA DATE := TO_DATE('2020/06/12');
    BBB DATE;
    CCC DATE;
    DDD DATE;
BEGIN
    BBB := LAST_DAY(AAA); --(1)6月の月末(2020/06/30)
    CCC := ADD_MONTHS(BBB, 1); --(2)6月の翌月(2020/07/31)
    DDD := CCC + 1; --(3)月末に+1日
END;
霊夢
霊夢

月末は「LAST_DAY」関数を使いま~す。
(1)で6月の月末を算出しているわ。
(2)で6月の月末の+1ヶ月を算出しているわ。
6月の月末「06/30」、7月の月末「07/31」に自動でなるのよ。
2月の月末や閏年も自動で算出されるわ。
(3)月末の翌日は月初よ。「2020/07/31」の翌日は「2020/08/01」

ありゃま!簡単だな!オイ!

魔理沙
魔理沙

ループで応用

霊夢
霊夢

それじゃあ、ループで応用しま~す。
下にコードを載せるわね。

DECLARE
    AAA DATE := SYSDATE;
    TYPE TYP_DATE IS TABLE OF DATE INDEX BY PLS_INTEGER;
    BBB TYP_DATE; --日付型の配列
    CCC TYP_DATE; --日付型の配列
BEGIN
    FOR I IN 1..10
    LOOP
        BBB(I) := AAA + I; --(1)「日」の加算
    END LOOP;
 
    FOR I IN 1..12
    LOOP
        CCC(I) := ADD_MONTHS(AAA, I); --(2)「月」の加算
    END LOOP;
END;
霊夢
霊夢

(1)はループで、1~10を日に加算した値を、それぞれ配列にいれているわ。
(2)はループで、1~12を月に加算した値を、それぞれ配列にいれているわ。

なるヘソ・ザ・ワールド
そして時は動き出す。

魔理沙
魔理沙
霊夢
霊夢

日付型の話はどうだったかしら?
魔理沙が別の次元へ行きかけてるので
このへんで終わるわね。
またね~。

【PL/SQL】メニュー

サイトマップ

2020年9月21日Oracle,PL/SQL,SQL,データベース,プログラム

Posted by こっぷ