Преобразовать интервал в минуты - PullRequest
15 голосов
/ 21 февраля 2011

Предположим, у меня есть 2 интервала:

INTERVAL '0 00:30:00' DAY TO SECOND
INTERVAL '0 04:00:00' DAY TO SECOND

Какой самый элегантный способ получить количество минут в каждом интервале.30 и 240 соответственно.

Да, я знаю, что могу выполнить EXTRACT(HOUR FROM interval) * 60 + EXTRACT(MINUTE FROM interval), но мне это кажется ужасным.

Есть ли лучшие решения?

Ответы [ 2 ]

24 голосов
/ 21 февраля 2011

То, что кажется вам ужасным, выглядит вполне приемлемым для меня. Если вы посмотрите на документацию по арифметике, вы можете выполнить на INTERVAL:

http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements001.htm#sthref175

тогда вы видите, что можете умножить их на цифры. Таким образом, если вы умножите свои интервалы на 24 и 60, вы можете получить количество минут, извлекая количество дней. Он более компактный, но я сомневаюсь, что он более элегантен, на ваш взгляд.

SQL> create table t (my_interval interval day to second)
  2  /

Table created.

SQL> insert into t
  2  select numtodsinterval(30,'minute') from dual union all
  3  select numtodsinterval(4,'hour') from dual
  4  /

2 rows created.

SQL> select my_interval
  2       , 60 * extract(hour from my_interval)
  3         + extract(minute from my_interval) minutes_terrible_way
  4       , extract(day from 24*60*my_interval) minutes_other_way
  5    from t
  6  /

MY_INTERVAL                    MINUTES_TERRIBLE_WAY MINUTES_OTHER_WAY
------------------------------ -------------------- -----------------
+00 00:30:00.000000                              30                30
+00 04:00:00.000000                             240               240

2 rows selected.

С уважением,
Роб.

1 голос
/ 13 июня 2018
(extract(day from my_interval) * 24 + extract(hour from my_interval)) * 60 + extract(minute from my_interval) my_way

Не забывайте о днях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...