Oracle:如何将分钟添加到时间戳?

我需要在Oracledate列中添加30分钟的值。 我通过指定在SELECT语句中执行此操作

to_char(date_and_time + (.000694 * 31)

在大多数时间都能正常工作。 但是,当时间在上午/下午的边界上。 例如,将30分钟添加到12:30 [即PM]返回1:00 ,即AM。 我预料的答案是13:00 。 什么是正确的方法来做到这一点?

所有其他的答案基本上是正确的,但我不认为有人直接回答你的原始问题。

假设你的例子中的“date_and_time”是一个types为DATE或TIMESTAMP的列,我想你只需要改变它:

 to_char(date_and_time + (.000694 * 31)) 

对此:

 to_char(date_and_time + (.000694 * 31), 'DD-MON-YYYY HH24:MI') 

这听起来像你的默认date格式使用小时的“HH”代码,而不是“HH24”。

另外,我认为你的常数术语既混乱又不精确。 我想你所做的就是计算(.000694)大概是一分钟的数值,然后乘以你想要添加的分钟数(在这个例子中是31,尽pipe你在文中说了30)。

我也会从一天开始,把它分成你想要的代码中的单位。 在这种情况下,(1/48)是30分钟; 或者如果你想分清楚,你可以写((1/24)*(1/2))。

这样可以避免四舍五入的错误(除了那些在这里应该没有意义的浮点数的内在错误之外),并且至less对我来说更加清楚。

除了可以添加date以外,还可以使用间隔数据types(假定您使用的是Oracle 9i或更高版本),这些数据types可能会更容易阅读,

 SQL> ed Wrote file afiedt.buf SELECT sysdate, sysdate + interval '30' minute FROM dual SQL> / SYSDATE SYSDATE+INTERVAL'30' -------------------- -------------------- 02-NOV-2008 16:21:40 02-NOV-2008 16:51:40 

http://www.orafaq.com/faq/how_does_one_add_a_day_hour_minute_second_to_a_date_value

SYSDATE伪列显示当前的系统date和时间。 将SYSDATE加1会使date提前1天。 使用分数来添加小时,分钟或秒钟的date

 SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual; SYSDATE SYSDATE+1/24 SYSDATE+1/1440 SYSDATE+1/86400 -------------------- -------------------- -------------------- -------------------- 03-Jul-2002 08:32:12 03-Jul-2002 09:32:12 03-Jul-2002 08:33:12 03-Jul-2002 08:32:13 
 UPDATE "TABLE" SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute WHERE (...) 

interval是其中之一

  • 小时
  • 分钟
  • 第二

如果字段的数据types是date或时间戳,那么如果您添加以天数(或您的案例中一天中正确的一小部分)给出的正确数字,则Oracle应始终给出正确的结果。 所以,如果你在30分钟内试图提高价值,你应该使用:

 select field + 0.5/24 from table; 

根据你提供的信息,我相信这是你所要做的,我确信它是有效的。

因为interval '30' minuteinterval '5' second更容易阅读,所以30 / (24 * 60)5 / (24 * 60 * 69)

例如

  • some_date + interval '2' hour
  • some_date + interval '30' minute
  • some_date + interval '5' second
  • some_date + interval '2' day

您也可以将几个单位合并成一个expression式:

  • some_date + interval '2 3:06' day to minute

为date值添加2天,3小时和6分钟

以上也是标准的SQL,也适用于其他几个DBMS。

手册中的更多详细信息: https : //docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF00221

我们不能使用这个

 SELECT date_and_time + INTERVAL '20:00' MINUTE TO SECOND FROM dual; 

我是这个领域的新手。

确保Oracle了解开始时间是PM,并为最终输出指定HH24格式掩码。

 SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time FROM dual TIME --------- 13:10 

注意:HH:MI中的'AM'只是AM / PM子午线指示符的占位符。 也可能是'PM'

根据你的要求,你需要HH24:MI格式的to_char。

要在oracle中编辑date,你可以试试

  select to_char(<columnName> + 5 / 24 + 30 / (24 * 60), 'DD/MM/RRRR hh:mi AM') AS <logicalName> from <tableName> 
 SELECT to_char(sysdate + (1/24/60) * 30, 'dd/mm/yy HH24:MI am') from dual; 

只要你可以使用这个与各种date格式….