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

时间:2015-11-19 13:19:34

标签: sql oracle date-arithmetic

给定 - 从一天开始的分钟数(数字类型),例如480.需要获得标准的oracle时间,例如 - 08:00:00 AM这样的操作有什么好的功能吗?

2 个答案:

答案 0 :(得分:5)

更好地使用 INTERVAL'分钟' 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

  

给定 - 从一天开始的分钟数(数字类型),例如480

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

例如,

NUMTODSINTERVAL(480, 'MINUTE')

话虽如此,

Oracle PL / SQL NUMTODSINTERVAL函数将输入数字转换为指定的Interval Day到Second Unit等效值。允许的间隔单位可以是DAY,HOUR,MINUTE或SECOND。

该函数的返回类型为INTERVAL

例如,

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

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

答案 1 :(得分:4)

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

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