Oracle SQL 関数 : SYSDATE : システム日付の取得
dateRet := SYSDATE; SYSDATEはシステム日付をDATE型のデータとして返します。
SQL> SELECT SYSDATE FROM DUAL; SYSDATE -------- 20-05-15
DUAL テーブルがいきなり出てきましたが、 このテーブルはダミーテーブルで FROM句 が必要無いSQL文の場合に仮のテーブルとして使用します。 (SQL-Server では FROM句 を書く必要は無かったりで各種DBによります)
Oracle では FROM句 が必須の様なのでダミーテーブルを記述します。
この DUAL テーブルは各種のSQL関数(ユーザ関数)の確認等に使ったりします。
以下の例は SUBSTR 関数による文字列の切出しを確認しています。
SQL> SELECT SUBSTR('0123456789', 1, 5) SUBSTRTEST FROM DUAL;
SUBSTRTEST
----------
01234
TO_CHAR 関数を使うことでシステム日付を文字列型に変換できます。
SQL> SELECT 2 TO_CHAR(SYSDATE, 'YYYY/MM/DD') SYSDATE1 3 , TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') SYSDATE2 FROM DUAL; SYSDATE1 SYSDATE2 -------------------- -------------------------------------- 2020/05/15 2020/05/15 10:31:46
DATE型 は日付データを整数部に、時刻データを小数部に持っていますので、整数値を加減算することで日付を加減算できます。 以下の例は SYSDATE の結果に「+1」「-1」を行っています。
SELECT SYSDATE - 1 AS 前日 , SYSDATE AS 当日 , SYSDATE + 1 AS 翌日 FROM DUAL; 前日 当日 翌日 -------- -------- -------- 21-02-07 21-02-08 21-02-09尚、PL/SQL で以下の様に行えば1年分の結果が求められます。
SET SERVEROUTPUT ON
DECLARE
-- 変数宣言
WORK VARCHAR2(32);
I NUMBER;
BEGIN
FOR I IN 1..365 LOOP
-- SYSDATE へ日数加算
SELECT TO_CHAR(SYSDATE + I, 'YYYY/MM/DD') INTO WORK FROM DUAL;
DBMS_OUTPUT.PUT_LINE('DATE=' || WORK);
END LOOP;
END;
/
DATE=2020/05/15 DATE=2020/05/16 DATE=2020/05/17 ... [省略] DATE=2021/05/13 DATE=2021/05/14 DATE=2021/05/15 PL/SQLプロシージャが正常に完了しました。