網頁

2020/9/22

Oracle SYSDATE - ( 10 / 1440 )

今天看到一段Oracle SQL的條件中有SYSDATE - ( 10 / 1440 )這段敘述,意思如下。

SYSDATE是Oracle提供取得目前日期的函式。而在計算SYSDATE取得的日期時,整數1代表1天,例如SYSDATE - 1代表前一天;計算分鐘數的話就要把1天轉成分鐘比例來計算,一天共有1440分鐘(24小時 * 60分鐘),所以一天中的10分鐘為10 / 1440

所以SYSDATE - ( 10 / 1440 )代表現在時間的前10分鐘。

觀察以下查詢

SELECT
    TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') NOW,                            -- 09-23-2020 14:26:40
    TO_CHAR(SYSDATE - 1, 'MM-DD-YYYY HH24:MI:SS') LAST_DAY,                   -- 09-22-2020 14:26:40
    TO_CHAR(SYSDATE - (10 / 1440), 'MM-DD-YYYY HH24:MI:SS') LAST_TEN_MINUTES, -- 09-23-2020 14:16:40
    TO_CHAR(SYSDATE + 1, 'MM-DD-YYYY HH24:MI:SS') NEXT_DAY,                   -- 09-24-2020 14:26:40
    TO_CHAR(SYSDATE + (10 / 1440), 'MM-DD-YYYY HH24:MI:SS') NEXT_TEN_MINUTES  -- 09-23-2020 14:36:40
FROM DUAL;

+---------------------+---------------------+---------------------+---------------------+---------------------+
|         NOW         |      LAST_DAY       |  LAST_TEN_MINUTES   |      NEXT_DAY       |  NEXT_TEN_MINUTES   |
+---------------------+---------------------+---------------------+---------------------+---------------------+
| 09-23-2020 14:26:40 | 09-22-2020 14:26:40 | 09-23-2020 14:16:40 | 09-24-2020 14:26:40 | 09-23-2020 14:36:40 |
+---------------------+---------------------+---------------------+---------------------+---------------------+

所以下面的是查詢PAYMENTORDER_TIME小於現在時間前十分鐘的資料。

SELECT * FROM PAYMENT p
WHERE p.ORDER_TIME < SYSDATE - ( 10 / 1440 ); -- 訂單時間小於現在時間前10分鐘

另外有比較易讀的寫法如下,效果相同。

SELECT * FROM PAYMENT p
WHERE p.ORDER_TIME < SYSDATE - INTERVAL '10' MINUTE; -- 訂單時間小於現在時間前10分鐘


沒有留言:

張貼留言