【问题标题】:Convert interval to minutes将间隔转换为分钟
【发布时间】:2025-12-21 01:20:12
【问题描述】:

假设我有 2 个区间:

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

在每个间隔中获取分钟数的最优雅方法是什么。 30240 相应地。

是的,我知道我可以执行EXTRACT(HOUR FROM interval) * 60 + EXTRACT(MINUTE FROM interval),但这对我来说看起来很糟糕。

有更好的解决方案吗?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    对你来说看起来很糟糕的东西,在我看来完全可以接受。如果您查看有关可以在 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.
    

    问候,
    抢。

    【讨论】:

    • 呵呵,绝招 ;-) 好吧,我决定遵循我的“可怕”方式,这在第二次查看时并不可怕。谢谢。
    • "extract(day from 24*60*my_interval)" 的好处是它也将包括任何一整天。
    • 这对我有帮助!以下文档也帮助了我:oracle-base.com/articles/misc/…
    【解决方案2】:
    (extract(day from my_interval) * 24 * 60 + extract(hour from my_interval)) * 60 + extract(minute from my_interval) my_way
    

    不要忘记日子。

    【讨论】:

    • 这与其他答案相同,不是吗?
    • 例如上面答案中的“minutes_terrible_way”缺少天数。
    【解决方案3】:

    重用 Rob 上面的例子,

    select (sysdate-(sysdate-to_dsinterval(my_interval)))*24*60 from t;
    

    【讨论】: