Как убрать выражение SQL - PullRequest
1 голос
/ 09 мая 2019

Приведенный ниже код сравнивает recv.rcpt_dtim (тип datetime) с текущей датой / временем.Он рассчитывает прошедшее время, в результате чего часы и минуты отформатированы в формате: «04:22».Мне потребовалось некоторое время, чтобы заставить его работать, но это только кажется неаккуратным.У кого-нибудь есть советы по его очистке?

TRIM((((CURRENT YEAR TO SECOND - recv.rcpt_dtim)::INTERVAL SECOND(9) to 
SECOND)/3600)::VARCHAR(12) || ':' || CASE WHEN (MOD(MOD(((CURRENT YEAR TO 
MINUTE - recv.rcpt_dtim)::INTERVAL MINUTE(9) to 
MINUTE)::VARCHAR(12)::INT,60),60))<10 THEN "0" ELSE "" END || 
(MOD(MOD(((CURRENT YEAR TO MINUTE - recv.rcpt_dtim)::INTERVAL MINUTE(9) 
to MINUTE)::VARCHAR(12)::INT,60),60))::VARCHAR(12))

1 Ответ

1 голос
/ 10 мая 2019

Используя Informix 12.10.FC12 Developer Edition, я могу сделать следующее:

CREATE TABLE test_time
(
    rcpt_dtim DATETIME YEAR TO SECOND
);

INSERT INTO test_time VALUES ( '2019-05-09 10:01:01' );
INSERT INTO test_time VALUES ( '2019-05-09 10:01:59' );
INSERT INTO test_time VALUES ( '2019-05-09 13:01:00' );
INSERT INTO test_time VALUES ( '2019-05-09 15:01:00' );
INSERT INTO test_time VALUES ( '2019-04-02 22:01:00' );

SELECT
    ( CURRENT YEAR TO SECOND - rcpt_dtim )::INTERVAL HOUR(9) TO MINUTE AS elapsed
FROM
    test_time
;


elapsed
  12:47
  12:46
   9:47
   7:47
   0:47
 888:47
...