将随机日期更新为单个列(重复日期)

时间:2013-07-17 10:19:33

标签: sql oracle random checksum newid

好的,首先我确定特定日期的日期整数,然后我需要将随机值更新到dpm_dateto列:

查询:

select to_char(to_date('15/05/2013','dd/mm/yyyy'), 'J') from dual;

结果:

2456428

现在,我尝试使用以下查询更新dpm_dateto列:

update t_dailypm
set dpm_dateto = 
     (select to_date(trunc(dbms_random.value(2456428,2456428+76)), 'J') from dual)
where dpm_loc = 'P2' and dpm_department like '%IN%';

结果:

900 rows updated.

但是,问题是dpm_dateto列中的每个不同值都使用相同的日期更新。我无法理解这一点。请帮助。

1 个答案:

答案 0 :(得分:4)

不要使用子查询。
只需设置= your_expression,如下例所示 Oracle优化子查询并仅对其进行一次计算,但将针对每一行计算表达式:

create table xyz(
  abc date
);

insert into xyz
select sysdate from dual
connect by level < 6;

select * from xyz;

ABC    
--------
13/07/17 
13/07/17 
13/07/17 
13/07/17 
13/07/17 

现在:

update xyz set abc = to_date(trunc(dbms_random.value(2456428,2456428+76)), 'J');

select * from xyz;

ABC    
--------
13/06/14 
13/07/23 
13/07/26 
13/06/24 
13/07/10