[英]How can I set hours and minutes of date with oracle sql?
如何使用 oracle sql 设置日期的小时和分钟?
下面是我的代码。
while venter < sysdate
loop
venter := venter + 1;
venter := venter - v1;
v1 := dbms_random.value(0, 30) / (24 * 60);
venter := venter + v1;
vexit := vexit + 1;
vexit := vexit - v2;
v2 := dbms_random.value(0, 20) / (24 * 60);
vexit := vexit + v2;
if mod(to_char(venter, 'd'), 7) + 1 in (1, 2) then --weekend
continue;
end if;
insert into testattend values (vseq, venter, vexit, 'normal', null, vclassSeq);
vseq := vseq + 1;
-- dbms_output.PUT_LINE(vseq);
-- dbms_output.PUT_LINE(venter);
end loop;
分钟作为随机值添加到存储在发文器中的值中。 如果这个循环继续下去,这些值就会累积起来,变成异常数据。
因此,我使用 v1 添加了减号和加号。 但是数据异常是output。
我想知道是否有办法让文特尔的一天保持原样,并在运行循环时只设置 8:45:00 的小时、分钟和秒值。
最良好的问候
我想知道是否有办法让文特尔的一天保持原样,并在运行循环时只设置 8:45:00 的小时、分钟和秒值。
您不需要 PL/SQL 循环和多个INSERT
语句; 您可以在单个 SQL 语句中完成所有操作:
INSERT INTO testatend
WITH calendar ( vseq, venter, vexit ) AS (
SELECT 1,
DATE '2021-05-01' + INTERVAL '08:45:00' HOUR TO SECOND,
DATE '2021-05-01' + INTERVAL '17:15:00' HOUR TO SECOND
FROM DUAL
UNION ALL
SELECT vseq + 1,
venter + CASE TRUNC(venter) - TRUNC(venter, 'IW')
WHEN 4 THEN INTERVAL '3' DAY -- Previous day is Friday
WHEN 5 THEN INTERVAL '2' DAY -- Previous day is Saturday
ELSE INTERVAL '1' DAY -- Prev. day is Sunday to Thursday
END,
vexit + CASE TRUNC(venter) - TRUNC(venter, 'IW')
WHEN 4 THEN INTERVAL '3' DAY -- Previous day is Friday
WHEN 5 THEN INTERVAL '2' DAY -- Previous day is Saturday
ELSE INTERVAL '1' DAY -- Prev. day is Sunday to Thursday
END
FROM calendar
WHERE venter + INTERVAL '1' DAY < SYSDATE
)
SELECT vseq,
venter - NUMTODSINTERVAL( DBMS_RANDOM.VALUE(0, 30), 'MINUTE'),
vexit - NUMTODSINTERVAL( DBMS_RANDOM.VALUE(0, 30), 'MINUTE'),
'normal',
null,
123 -- vClassSeq
FROM calendar
(注意:如果您想要固定时间,则不要在最后一步中减去NUMTODSINTERVAL( DBMS_RANDOM.VALUE(0, 30), 'MINUTE')
。)
其中,例如表:
CREATE TABLE testatend (
id NUMBER,
time_in DATE,
time_out DATE,
type VARCHAR2(20),
something NUMBER,
class_id NUMBER
);
然后插入可能具有以下值的 23 行:
ID TIME_IN 暂停 类型 某物 班级号 1 2021-05-01 08:31:46 2021-05-01 17:01:16 普通的 123 2 2021-05-03 08:37:28 2021-05-03 16:48:27 普通的 123 3 2021-05-04 08:21:48 2021-05-04 16:49:06 普通的 123 4 2021-05-05 08:16:39 2021-05-05 17:12:19 普通的 123 5 2021-05-06 08:41:02 2021-05-06 16:49:22 普通的 123 6 2021-05-07 08:42:28 2021-05-07 17:09:07 普通的 123 7 2021-05-10 08:35:11 2021-05-10 16:46:37 普通的 123 8 2021-05-11 08:31:00 2021-05-11 16:56:35 普通的 123 9 2021-05-12 08:43:20 2021-05-12 17:05:23 普通的 123 10 2021-05-13 08:21:07 2021-05-13 16:50:53 普通的 123 11 2021-05-14 08:34:12 2021-05-14 17:01:06 普通的 123 12 2021-05-17 08:31:46 2021-05-17 16:45:04 普通的 123 13 2021-05-18 08:39:08 2021-05-18 17:04:08 普通的 123 14 2021-05-19 08:24:34 2021-05-19 16:53:57 普通的 123 15 2021-05-20 08:39:33 2021-05-20 17:12:05 普通的 123 16 2021-05-21 08:24:42 2021-05-21 16:46:23 普通的 123 17 2021-05-24 08:40:35 2021-05-24 16:52:41 普通的 123 18 2021-05-25 08:41:08 2021-05-25 16:47:41 普通的 123 19 2021-05-26 08:27:00 2021-05-26 17:04:04 普通的 123 20 2021-05-27 08:40:47 2021-05-27 17:00:28 普通的 123 21 2021-05-28 08:40:38 2021-05-28 16:52:54 普通的 123 22 2021-05-31 08:22:53 2021-05-31 16:45:51 普通的 123 23 2021-06-01 08:26:23 2021-06-01 17:14:09 普通的 123
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.