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