天天看点

数据库生成指定范围内日期时间

*******打卡记录时间生成

一: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,这个可以自己修改生成范围就行了。