ORACLE 更新一个表的所有更新时间为随机日期

接到一个需求, 更新一个表的所有更新时间为随机时间。

一个用户表里有一个字段,修改密码时间,因为代码的问题,每次用户修改密码时没有更新这个时间,所以需要写一个sql,给这个字段赋一个默认值。

本来一个简单的update就可以搞定了,

update user_info set update_pwd_time = '2020-11-20 09:00:00' where update_pwd_time is null;

但是,需求里要求:默认值必须为一个范围内的默认值

日期范围为:10月10号到28号

时间范围为:8点到18点

分和秒也得是随机值。

这就很操蛋了,经过一番钻研(百度大法)后,想出了一个解决思路,现记录如下

--创建一个临时表,包含两个主要字段,一个用户ID作为唯一标识,一个生成的随机时间
create table TBL_USER_PWD_TIME(
    id number,
    user_id varchar2(64) not null,
    UPDATE_PWD_TIME varchar2(20) not null
);
commit ;
--往临时表里插入用户ID和随机时间,这样就能保证一个用户对应一个随机时间。
insert into TBL_OPERATOR_PWD_TIME
	select
	rownum,
	t.user_id,
	 to_char(to_date(TRUNC(DBMS_RANDOM.VALUE(
	       to_number(to_char(to_date('20201010','yyyymmdd'),'J')),
	       to_number(to_char(to_date('20201028','yyyymmdd')+1,'J')))),'J')
	           +DBMS_RANDOM.VALUE(1200,2700)/3600,'yyyy-MM-dd HH24:mi:ss')
	from USER_INF t where t.update_pwd_time is null
;
commit ;
--然后更新用户表。
update USER_INF t  set t.UPDATE_PWD_TIME =
    (select UPDATE_PWD_TIME from TBL_USER_PWD_TIME 
where user_id= t.user_id)
where t.UPDATE_PWD_TIME is null;
commit ;
--删除临时表。
drop table TBL_USER_PWD_TIME;
commit ;

下面详细记录下怎么用sql生成一定范围内的随机日期+随机时间

首先对应第一个要求:10月份10号-28号之间

首先获取10月10号和10月28号的日期整数,然后通过DBMS_RANDOM.VALUE(min,max)获取这个范围内的随机数,这样就获取到了10号到28号的随机日期

然后因为需求里要再加上随机时间,所以最后需要加上DBMS_RANDOM.VALUE(1200,2700)/3600。

好了,重在动手,上面贴的方法亲测有效,注意下表名和字段名就行。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值