我的数据库表中的数据为
last_updated_product
01/Jan/1899 6:25:01 AM
01/Jan/1899 6:25:02 AM
如何在不修改时间部分的情况下仅使用sysdate更新日期部分? 预计出局
21/Aug/2013 6:25:01 AM
21/Aug/2013 6:25:02 AM
last_updated_product
列数据类型定义为date
由于
答案 0 :(得分:5)
您需要在当天使用午夜,并从原始值添加时间部分:
trunc(sysdate) + (last_updated_product - trunc(last_updated_product))
trunc()
为您提供时间组件设置为00:00:00的日期,因此date - trunc(date)
只提供原始时间组件,作为一个数字(一天的一小部分) datetime arithmetic rules。那么这个数字可以加到今天的午夜。
不确定您是在实际更新表格还是仅仅在查询中执行此操作,但无论如何都是相同的计算。
答案 1 :(得分:2)
您可以计算时间部分并添加所需日期,例如:
update my_table
set last_updated_product =
to_date('21/Aug/2013', 'dd/Mon/yyyy')
-- difference between the start of the day and the time
+ (last_updated_product - trunc(last_updated_product))
额外的括号是为了确保查询按照操作员的优先顺序工作,因为您无法在日期中添加日期,但可以添加间隔。括号确保在添加之前评估last_updated_product - trunc(last_updated_product)
。
或将其转换为字符,将其连接到日期,然后将其转换回日期。
update my_table
set last_updated_product =
to_date('21/Aug/2013' || to_char(last_updated_product, 'hh24:mi:ss')
, 'dd/Mon/yyyyhh24:mi:ss')
e.g。
create table my_table ( last_updated_product date );
Table created.
insert into my_table values (sysdate - 100);
1 row created.
update my_table
set last_updated_product =
to_date('21/Aug/2013', 'dd/Mon/yyyy')
+ (last_updated_product - trunc(last_updated_product))
;
1 row updated.
select * from my_table;
LAST_UPDATED_PRODUC
-------------------
2013/08/21 08:13:57
答案 2 :(得分:0)
试
update <table>
set last_updated_product =
last_updated_product
- trunc(last_updated_product )
+ trunc(sysdate)
where <condition>
;