我有日期函数来创建输入日期并创建随机时间我想将它们结合起来

Posted

技术标签:

【中文标题】我有日期函数来创建输入日期并创建随机时间我想将它们结合起来【英文标题】:I have date function to create for entering date and to create random time i want to combine both of them 【发布时间】:2021-02-24 11:27:42 【问题描述】:

嗨,亲爱的,我有一个查询,它为提到的特定长度创建日期,一个创建随机时间的查询想要加入两者以生成日期是这样的 它为特定长度创建日期并插入到表中查询是

insert into calendar_date2  
with dates as (  
  select date'2019-12-31'+level dt  
  from   dual  
  connect by level <= 365  
)  
  select dt,   
         case   
           when to_char(dt, 'fmday') in ('sunday')   
           then 'N' else 'Y'  
         end  
  from dates
;

它将做的是输入CALENDER_DATE2按级别连接中提到的所有日期

第二个查询是生成随机时间

with test (start_date) as
   (select to_date('01.01.2021 07:45', 'dd.mm.yyyy hh24:mi') from dual
 )
 select start_date + round(dbms_random.value(1, 15)) / (24 * 60) result
 from test
 connect by level <= 15

我想写两个查询一起工作我写的对我不起作用的是

insert into calendar_date2  
with dates as (  
  select dates(to_date('01.01.2020 07:45', 'dd.mm.yyyy hh24:mi'))+level dt  
  from   dual
select start_date + round(dbms_random.value(1, 15)) / (24 * 60) result
 from test  
  connect by level <= 365  
)  
  select dt,   
         case   
           when to_char(dt, 'fmday') in ('sunday')   
           then 'N' else 'Y'  
         end  
  from dates
;

我写了这个,但它对我不起作用,请帮助从过去几个小时在这里敲击

【问题讨论】:

【参考方案1】:

你可以使用:

insert into calendar_date2 (dt, is_workday )
SELECT dt,
       DECODE( TRUNC( dt ) - TRUNC( dt, 'IW' ), 6, 'N', 'Y' )
FROM   (
         SELECT DATE '2020-01-01' + FLOOR( (LEVEL - 1) / 15 )
                  + FLOOR(DBMS_RANDOM.VALUE(1, 16)) * INTERVAL '1' MINUTE
                  AS dt
         FROM   DUAL
         CONNECT BY
                DATE '2020-01-01' + FLOOR( (LEVEL - 1) / 15 )
                  < ADD_MONTHS( DATE '2020-01-01', 12 )
       )

哪个是桌子:

  dt         DATE
             NOT NULL,
  is_workday CHAR(1)
             NOT NULL
             CONSTRAINT calendar_date2__iwd__chk CHECK ( is_workday IN ( 'Y', 'N' ) )
);

为 2020 年的每一天提供 15 行,每行随机偏移距午夜 1 到 15 分钟。

注意:

计算一年中的天数,因此您无需考虑闰年。 使用FLOOR( DBMS_RANDOM.VALUE( 1, 16 ) ) 而不是ROUND( DBMS_RANDOM.VALUE( 1, 15 ) ),因为第一个会给你一个均匀分布的值,而第二个只会在随机值介于 1 和 1.5 之间以及值 15 介于 14.5 和 15 之间时给出值 1这两种情况的发生频率都只有其余数字的一半,并且会给您带来不平衡的分布。 您可以通过将一天的开始时间TRUNC( dt ) 与 ISO 周的开始时间TRUNC( dt, 'IW' ) 进行比较来计算星期几。这样做的好处是它独立于 NLS 设置,适用于所有语言,而不仅限于英语地区。

db小提琴here

【讨论】:

很棒的人工作我不需要每天 15 天,所以我删除了/15,它工作得很好,如果我需要在@987654330 之间的随机时间,我是否可能想要与 mytime 相处的时间@ 它给了我这个,如果变量(移位)的值是 A,它想创建条件 然后它从 07:45 am to 5:00 pm 开始,如果 B 然后 for random(04:45 pm to 5:00 pm) 请帮助我 @MTO @MTO 我试过用这个SELECT DATE ((to_date('01.01.2020 07:45', 'dd.mm.yyyy hh24:mi'))) + FLOOR( (LEVEL - 1)) 代替SELECT DATE '2020-01-01' + FLOOR( (LEVEL - 1) / 15 ),但没用 @aws 类似db<>fiddle? @MTO 我多么感谢你相信我,你不会认为这是我过去 15 天的工作,但没有得到它你太棒了,我能说的太好了,谢谢你 bbbbuuuuuunnnnnndddddlllllle 跨度> @MTO 亲爱的,我有一个名为 EMPLOYEES、Pay_IN_OUT 和 SHIFT_TIMINGS 的表,其中员工有一个 EMPLOYEE_ID1、SHIFT 和 WEEKREST 列,而 SHIFT_TIMINGS 有列 SHIFT 和 Shift 开始时间在表 Pay_IN_OUT 中有 TIME_IN、EMPLOYEE_ID1、IS_WORK_DAY .亲爱的,我希望它从员工中选择员工 ID、工作日和轮班,然后从轮班时间和工作日检查轮班时间,如果星期天比 is_workday N 否则哪个工作日有提到的一天插入 in pay_in _out 之类这个10001, 1/1/2020 7:55:00 AM, y 意味着在pay_in_out employee_id1, datetime, is_work_day, weekrest

以上是关于我有日期函数来创建输入日期并创建随机时间我想将它们结合起来的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列

访问 - 控制会议记录的表格

在 Windows 批处理中使用创建日期和时间重命名文件

Razor 页面创建输入类型日期变成类型文本

如何使用当前日期作为函数的输入来获取月份名称

聚类日期列表