【发布时间】:2023-01-27 22:46:48
【问题描述】:
我正在尝试创建一个函数,它返回一系列时间戳之间的随机 TIMESTAMP。
它似乎并不是一直都在工作,因为有时我会在开始范围之前得到一个值,有时我会在结束范围之后得到一个值。
下面是我的测试案例和 TIMESTAMP 超出范围的示例。在此示例中,TIMESTAMP 在 TIMESTAMP '2023-01-25 12:00:00' 的结束范围之后
有人可以解释一下问题是什么,并告诉我如何解决它,因为我似乎无法弄清楚。
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-MON-YYYY HH24:MI:SS.FF';
CREATE OR REPLACE FUNCTION random_timestamp(
p_from IN TIMESTAMP,
p_to IN TIMESTAMP,
p_fraction IN VARCHAR2 DEFAULT 'Y'
) RETURN TIMESTAMP
IS
return_val_y TIMESTAMP := p_from + dbms_random.value () * (p_to - p_from + INTERVAL '1' DAY);
return_val_n TIMESTAMP (0) := return_val_y;
BEGIN
RETURN CASE
WHEN UPPER (SUBSTR (p_fraction, 1, 1)) = 'Y'
THEN return_val_y
ELSE return_val_N
END;
END random_timestamp;
/
SELECT random_timestamp(
TIMESTAMP '2023-01-25 09:00:00', TIMESTAMP '2023-01-25 12:00:00') as ts from dual
TS
26-JAN-2023 03:59:06.013730
【问题讨论】: