如何在oracle中使用dbms_random在组内生成常量日期?

时间:2015-03-31 11:06:59

标签: sql oracle

这是我的数据集。

P_Id I_id I_Name Qty
1   1   Jeans   1
1   5   Salwar  1
2   3   Socks   1

我想更新此表的创建日期,如下所示:

P_Id I_id   I_Name  Qty  C_dt
    1   1   Jeans   1  01-01-2011
    1   5   Salwar  1  01-01-2011
    2   3   Socks   1  02-05-2013

我希望c_dt对于特定的P_id保持不变。我尝试使用dbms_random但它不断变化。我用过的查询:

update test_ins set c_dt=TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J'),TO_CHAR(sysdate,'J'))),'J') where p_id=i;

* i指的是每次购买的迭代次数。

感谢任何帮助。 谢谢, Pravellika J

2 个答案:

答案 0 :(得分:1)

谢谢戈登,我想到了另一种方式:

    update test_ins a set c_dt=
(
select TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J'),TO_CHAR(sysdate,'J'))),'J')
from dual group by a.p_id 
)
where purchase_id=i;

我刚刚在子查询中将 group by子句添加到p_id列,它就像魅力一样:)

答案 1 :(得分:0)

使用临时表怎么样?逻辑将是这样的:

create table temp_dte as 
    select distinct p_id, 
           TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-0101', 'J'), 
                                           TO_CHAR(sysdate, 'J')
                                          )), 'J') as val
    from test_ins;

然后:

update test_ins
    set c_dt = (select val from temp_dte td where test_ins.p_id = td.p_id);