2022.08.09
SQLチューニング(第33回)「日データ関連関数紹介」(2/3回)
今回は、「日データ関連関数紹介」の2回目、日付、時間、分、秒の計算」についてです。早速始めましょう。
8.2 日付、時間、分、秒の計算
一般的にDATEは日時単位での演算が主なりますが、時間、分、秒で演算する場合も意外に多くあります。 たとえば現在の時間から4時間後、30分後、10秒後の時間を求める演算も必要に応じて実行できます。 しかし、Oracleは日付基準の演算のみ可能であり、時間、分、秒基準の演算をサポートしません。 その場合、私たちは1日を時間、分、または秒単位に変換して計算しなければなりません。 以下に、1日を時間、分、秒に変換する演算式を示します。
日時計算= DateTime - 1 = 1日前
(例:5日前= DateTime? 5 )
時間計算= DateTime - 1/24 = 1時間前[24 = 24時間]
(例:5時間前= DateTime? 5/24 )
分計算= DateTime - 1/(24*60) = 1分前[24=24時間、60=60分]
(例:5分前= DateTime - 5/(24*60) )
秒計算= DateTime - 1/(24*60*60) = 1秒前[24=24時間、60=60分、60 = 60秒]
(例:5秒前= DateTime - 5/(24*60*60) )
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 1日前:' || TO_CHAR(SYSDATE - 1,'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 5日前:' || TO_CHAR(SYSDATE - 5,'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 1時間前:' || TO_CHAR(SYSDATE - 1/24,'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 5時間前:' || TO_CHAR(SYSDATE - 5/24,'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 1分前:' || TO_CHAR(SYSDATE - 1/(24*60),'yyyymmdd hh24:mi:ss')
FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 5分前:' || TO_CHAR(SYSDATE - 5/(24*60),'yyyymmdd hh24:mi:ss')
FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 1秒前:' || TO_CHAR(SYSDATE - 1/(24*60*60),'yyyymmdd hh24:mi:ss')
FROM DUAL
UNION ALL
SELECT '現在時刻:' || TO_CHAR(SYSDATE,'yyyymmdd hh24:mi:ss') AS "D、T,M,S計算する"
FROM DUAL
UNION ALL
SELECT ' 5秒前:' || TO_CHAR(SYSDATE - 5/(24*60*60),'yyyymmdd hh24:mi:ss')
FROM DUAL ;
D,T,M,Sの計算
------------------------------
現在時刻:20111025 10:17:44
1日前:20111024 10:17:44
現在時刻:20111025 10:17:44
5日前:20111020 10:17:44
現在時刻:20111025 10:17:44
1時間前:20111025 09:17:44
現在時刻:20111025 10:17:44
5時間前:20111025 05:17:44
現在時刻:20111025 10:17:44
1分前:20111025 10:16:44
現在時刻:20111025 10:17:44
5分前:20111025 10:12:44
現在時刻:20111025 10:17:44
1秒前:20111025 10:17:43
現在時刻:20111025 10:17:44
5秒前:20111025 10:17:39
[照会例]
現在の時間:2011年12月28日14時00分
退勤時間:2011年12月28日18時00分
退勤まで残っている時間を秒計算すると?
DATE - DATEは日時が抽出されるので抽出値を秒変換するためには、抽出値に86,400 (一日を秒換算した結果)をかければ良いことになります。
SELECT ( TO_DATE('20111228180000','yyyymmddhh24miss') -
TO_DATE('20111228140000','yyyymmddhh24miss') ) * 86400 AS RemainSecond
FROM DUAL ;
REMAINSECOND
------------
14400 ---> 14400秒残る。
SELECT 14400 / 60 / 60 FROM DUAL ;
14400/60/60
-----------
4 ---> 4時間残る。
今回は、ここまでです。次回は、「日付と関連の便利な関数」について、お送りします。では、See you ^^