如何更新oracle sql中的时间?

时间:2016-10-24 05:09:38

标签: oracle

我需要一个查询,通过保留日期但更改时间来更新约会日期的时间。 例如

2016年2月10日09:00:00 我想把它改成10-Feb-2016 10:00:00。

Update Appointment
set vdate = '10:00:00'
where vdate= '10-Feb-2016'

我得到“0行已更新”。不确定我是否遗漏了什么。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用trunc()DATE(或TIMESTAMP)的时间部分设置为00:00:00,然后将10小时添加到其中:

Update Appointment
   set vdate = trunc(vdate) + interval '10' hour
where trunc(vdate) = DATE '2016-02-10'

这会更改日期为2016-02-10所有行。如果您只想为那些在09:00(忽略分钟和秒)的人那样做,那么只需向这些行添加一小时

Update Appointment
   set vdate = trunc(vdate) + interval '1' hour
where trunc(vdate, 'hh24') = timestamp '2016-02-10 09:00:00'

trunc(vdate, 'hh24')会将date值的分钟和秒设置为00:00,以便与2016-02-10 09:00:00进行比较。

无关,但是:依赖于隐式数据类型转换。 '10-Feb-2016'是字符串值,而不是DATE文字。要指定日期要么使用ANSI DATE文字(正如我在上面的语句中所做的那样),要么使用to_date()函数格式掩码将字符串文字转换为正确的日期值。

您的语句受到恶意隐式数据类型转换的影响,如果运行该语句的SQL客户端使用不同的NLS设置(例如,它将在我的计算机上失败),则会失败。

答案 1 :(得分:0)

试试这样。

UPDATE MyTable
 SET MyDate = DATEADD(HOUR, 4, CAST(CAST(MyDate AS DATE) AS DATETIME))

UPDATE MyTable 
 SET MyDate = DATEADD(HOUR, 4, CAST(FLOOR(CAST(MyDate AS FLOAT)) AS DATETIME))

答案 2 :(得分:0)

如果你想要做的是在一个日期添加一个小时,那么你可以这样做:

Update Appointment
set    vdate = vdate + 1/24
where  vdate = to_date('10/02/2016 09:00', 'dd/mm/yyyy hh24:mi');

因为在Oracle中,日期差异以天数衡量,一小时是一天的1/24。

如果你想要做的是指定一个确切的时间(例如到10:25:48),那么你可以改为:

Update Appointment
set    vdate = trunc(vdate) + 10/24 + 25/(24*60) + 48/(24*60*60)
where  vdate = to_date('10/02/2016 09:00', 'dd/mm/yyyy hh24:mi');

请记住,这些更新将更新日期为2016年2月10日上午9点的所有行。如果要指定更具体的行或行集,则需要更改查询的where子句。