今天看到一段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 |
+---------------------+---------------------+---------------------+---------------------+---------------------+
所以下面的是查詢PAYMENT
中ORDER_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分鐘
沒有留言:
張貼留言