我有日期函数来创建输入日期和创建随机时间我想将它们结合起来
I have date function to create for entering date and to create random time i want to combine both of them
嗨,亲爱的,我有一个为提到的特定长度创建日期的查询和一个创建随机时间的查询想要加入这两个日期生成是这个
它为特定长度创建日期并插入 table 查询是
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
connect by level
中提到的所有日期
第二个查询是生成随机时间
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
;
我写了这篇文章,但它对我不起作用请帮助过去几个小时来这里
您可以使用:
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 )
)
其中 table:
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 之间时给出一个值 1 和一个值15 介于 14.5 和 15 之间,两者的出现频率仅为其余数字的一半,并且会给您带来不平衡的分布。
- 您可以通过比较一天的开始
TRUNC( dt )
和 ISO 周的开始 TRUNC( dt, 'IW' )
来计算星期几。这样做的好处是它独立于 NLS 设置并且适用于所有语言,而不是仅限于英语国家。
db<>fiddle here
嗨,亲爱的,我有一个为提到的特定长度创建日期的查询和一个创建随机时间的查询想要加入这两个日期生成是这个 它为特定长度创建日期并插入 table 查询是
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
connect by level
第二个查询是生成随机时间
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
;
我写了这篇文章,但它对我不起作用请帮助过去几个小时来这里
您可以使用:
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 )
)
其中 table:
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 之间时给出一个值 1 和一个值15 介于 14.5 和 15 之间,两者的出现频率仅为其余数字的一半,并且会给您带来不平衡的分布。 - 您可以通过比较一天的开始
TRUNC( dt )
和 ISO 周的开始TRUNC( dt, 'IW' )
来计算星期几。这样做的好处是它独立于 NLS 设置并且适用于所有语言,而不是仅限于英语国家。
db<>fiddle here