*******打卡记录时间生成
一:oracle数据库生成
1.oracle生成指定范围内时间,列如:2017-5-4,并复制到xiajun表中,如下图。
create table xiajun AS (select to_char(trunc(current_timestamp) - level, 'YYYY-MM-DD') as date_dt
from dual
connect by level <= add_months(trunc(current_timestamp), 7) -
trunc(current_timestamp) --7代表到今天为止,需要几个月时间
order by date_dt);
-------------------------------------------------------------------------------------------------
2.oralce生成随机时分秒,如:19:48:24。
select CONCAT(CONCAT(CONCAT(CONCAT(LPAD(FLOOR(17 + (dbms_random.value(0,1) * 4)), 2, 0), ':'),
LPAD(FLOOR(30 + (dbms_random.value(0,1) * 29)), 2, 0)),
':'),
LPAD(FLOOR(0 + (dbms_random.value(0,1) * 59)), 2, 0)) from dual;
-------------------------------------------------------------------------------------------------------------- 3.通过oracle存储过程拼接日期时间。存储过程dtxiaj
create or replace procedure dtxiaj(timeLenght IN NUMBER, --1代表上班时间,2代表下班时间
RETURN_CODE OUT NUMBER,
RETURN_MESSAGE OUT VARCHAR2) is
V_DATE VARCHAR2(16);
V_SFM VARCHAR2(16);
--循环xiajun表
CURSOR OLT_C is
select a.date_dt from xiajun a;
begin
OPEN OLT_C;
LOOP
BEGIN
FETCH OLT_C
INTO V_DATE;
EXIT WHEN OLT_C%NOTFOUND;
EXCEPTION
WHEN OTHERS THEN
RETURN_CODE := 2;
RETURN_MESSAGE := '取xiajun表值失败!';
END;
--拼接上午时分秒
if timeLenght = 1 then
BEGIN
select (select CONCAT(CONCAT(CONCAT(CONCAT(8, ':'),
LPAD(FLOOR(30 +
(dbms_random.value(0,
1) * 29)),
2,
0)),
':'),
LPAD(FLOOR(0 + (dbms_random.value(0, 1) * 59)),
2,
0))
from dual)
into V_SFM
from dual;
EXCEPTION
WHEN OTHERS THEN
RETURN_CODE := 2;
RETURN_MESSAGE := '随机生成时分秒失败!';
END;
end if;
--拼接下午时分秒
if timeLenght = 2 then
BEGIN
select (select CONCAT(CONCAT(CONCAT(CONCAT(LPAD(FLOOR(17 +
(dbms_random.value(0,
1) * 4)),
2,
0),
':'),
LPAD(FLOOR(30 +
(dbms_random.value(0,
1) * 29)),
2,
0)),
':'),
LPAD(FLOOR(0 + (dbms_random.value(0, 1) * 59)),
2,
0))
from dual)
into V_SFM
from dual;
EXCEPTION
WHEN OTHERS THEN
RETURN_CODE := 2;
RETURN_MESSAGE := '随机生成时分秒失败!';
END;
end if;
--拼接日期及时分秒
BEGIN
insert into xiajun_1 (select CONCAT(CONCAT(V_DATE, ' '), V_SFM) as xia from dual);
EXCEPTION
WHEN OTHERS THEN
RETURN_CODE := 2;
RETURN_MESSAGE := '数据xiajun_xiajun表,生成日期和时分秒失败!';
END;
end LOOP;
end dtxiaj;
------------------------------------------------------------------------------- ---------------------------------------------
4.最后输入参数运行产生时间数据
==============顺便总结哈mysql生成日期和时分秒============================
1.mysql生成日期
set @i = -1;
set @sql = repeat(" select 1 union all",-datediff('2021-01-01','2030-12-31')+1);
set @sql = left(@sql,length(@sql)-length(" union all"));
set @sql = concat("select date_add('2021-01-01',interval @i:[email protected]+1 day) as date from (",@sql,") as tmp");
prepare stmt from @sql;
execute stmt
2.mysql随机生成时分秒。
SELECT
CONCAT(
LPAD(FLOOR(0 +(RAND() * 23)), 2, 0),
':',
LPAD(FLOOR(0 +(RAND() * 59)), 2, 0),
':',
LPAD(FLOOR(0 +(RAND() * 59)), 2, 0)
)
==================================================================
5.只上面oracle生成日期时分秒注意事项。
①在oracle不同mysql,oracle中CONCAT只能拼接两个,所以连续拼接可以完成。
②存储过程拼接的时间,这个存储过程生成的小时时间没在24小时内,
我指定了入参timeLenght,1为早上8:00点,2为晚上17:00到20:00,这个可以自己修改生成范围就行了。