Oracle:如何在时间戳上添加分钟?

时间:2008-11-02 20:34:32

标签: oracle date timestamp date-arithmetic

我需要在Oracle日期列中添加30分钟的值。我通过指定

在我的SELECT语句中执行此操作

to_char(date_and_time + (.000694 * 31)

大部分时间都可以正常工作。但是当时间在AM / PM边界时。例如,向12:30 [即PM]添加30分钟会返回1:00,即AM。我期待的答案是13:00。这样做的正确方法是什么?

13 个答案:

答案 0 :(得分:112)

除了能够为日期添加天数之外,您还可以使用区间数据类型,假设您在Oracle 9i或更高版本,这可能更容易阅读,

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

答案 1 :(得分:28)

所有其他答案基本上都是对的,但我认为没有人直接回答你原来的问题。

假设您的示例中的“date_and_time”是一个类型为DATE或TIMESTAMP的列,我认为您只需要更改它:

to_char(date_and_time + (.000694 * 31))

到此:

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

听起来您的默认日期格式使用小时的“HH”代码,而不是“HH24”。

另外,我认为你的常数术语既令人困惑又不精确。我猜你所做的是计算(.000694)大约是一分钟的值,并且你将它乘以你想要添加的分钟数(在示例中为31,尽管你在文中说了30)。 / p>

我也会从一天开始,然后将其划分为代码中所需的单位。在这种情况下,(1/48)将是30分钟;或者如果你想分清它,你可以写((1/24)*(1/2))。

这样可以避免舍入错误(除了那些在浮点中固有的错误,这里没有意义)并且更清楚,至少对我而言。

答案 2 :(得分:11)

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

SYSDATE伪列显示当前系统日期和时间。将1添加到SYSDATE将使日期提前1天。使用分数将日期,分钟或秒添加到日期

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

答案 3 :(得分:10)

UPDATE "TABLE" 
SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute 
WHERE (...)

interval是其中一个

  • YEAR
  • HOUR
  • MINUTE
  • SECOND

答案 4 :(得分:7)

我更喜欢使用interval字面值,因为interval '30' minuteinterval '5' second30 / (24 * 60)5 / (24 * 60 * 69)更容易阅读

e.g。

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

您还可以将多个单位组合成一个表达式:

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

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

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

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

答案 5 :(得分:3)

如果字段的数据类型是日期或时间戳,那么如果您添加以天数给出的正确数字(或您的情况下一天的正确分数),Oracle应始终给出正确的结果。因此,如果您试图在30分钟内提高价值,则应使用:

select field + 0.5/24 from table;

根据您提供的信息,我相信这是您尝试做的事情,我确信它有效。

答案 6 :(得分:2)

我们不能使用这个

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

我是这个领域的新手。

答案 7 :(得分:1)

确保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'

答案 8 :(得分:1)

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

答案 9 :(得分:0)

要在oracle中编辑日期,您可以尝试

  select to_char(<columnName> + 5 / 24 + 30 / (24 * 60),
           'DD/MM/RRRR hh:mi AM') AS <logicalName> from <tableName>

答案 10 :(得分:0)

非常容易喜欢

我将系统日期增加了10分钟,并且始终优先使用Db服务器功能而不是自定义功能。

.error: function(jqXHR,error, errorThrown) {  
           if(jqXHR.status&&jqXHR.status==400){
               alert(jqXHR.responseText); 
           }else{
               alert("Something went wrong");
           }

答案 11 :(得分:0)

Oracle现在具有新的内置函数来执行此操作:

const

答案 12 :(得分:-1)

SELECT to_char(sysdate + (1/24/60) * 30, 'dd/mm/yy HH24:MI am') from dual;

只需将其用于各种日期格式....