L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

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 ^^

PHP Code Snippets Powered By : XYZScripts.com