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プロシージャが正常に完了しました。