Oracle 数据库:从一天开始的总分钟数中获取时间

Oracle database: getting time from total amount of minutes from the beginning of a day

给定 - 从一天开始算起的分钟数(数字 oracle 类型),例如480.需要获取标准的oracle时间,例如- 08:00:00 上午。有什么好的函数可以做这样的操作吗?

只需将 minutes/1440 添加到日期,例如

select to_date('1.1.2015','dd.mm.yyyy')+480/1440 from dual;

最好使用INTERVAL 'minutes' MINUTE来增加分钟数。通俗易懂。

your_date_time + INTERVAL '480' MINUTE

例如,

SQL> SELECT TRUNC(SYSDATE), TRUNC(SYSDATE) + INTERVAL '480' MINUTE tmstamp FROM dual;

TRUNC(SYSDATE)      TMSTAMP
------------------- -------------------
11/19/2015 00:00:00 11/19/2015 08:00:00

事实上,另一种独立于 NLS 设置的方式,当您必须将日期作为文字传递时。因此,不要使用 TO_DATE,而是使用 ANSI Date literal,它使用固定格式 'YYYY-MM-DD' 并且 NLS 独立.

SQL> SELECT DATE '2015-11-19' curr_date, DATE '2015-11-19' + INTERVAL '480' MINUTE tmstamp 
2    FROM dual;

CURR_DATE           TMSTAMP
------------------- -------------------
11/19/2015 00:00:00 11/19/2015 08:00:00

UDPATE

Given - number of minutes (number oracle type) from the beginning of a day, e.g. 480

如果分钟值在SQL中不是静态的要硬编码,而是PL/SQL 变量,然后正如@AlexPoole 提到的那样,您需要使用 NUMTODSINTERVAL.

例如,

NUMTODSINTERVAL(480, 'MINUTE')

话虽如此,

Oracle PL/SQL NUMTODSINTERVAL 函数将输入数字转换为其指定的间隔日与秒单位等值。允许的时间间隔单位可以是 DAY、HOUR、MINUTE 或 SECOND。

函数的return类型为INTERVAL.

例如,

SQL> SELECT NUMTODSINTERVAL(480, 'MINUTE') intrvl FROM DUAL;

INTRVL    
---------------------------------------------------------------------    
+000000000 08:00:00.000000000