СЛУЧАЙНЫЕ ДАТЫ В PL / SQL - PullRequest
       3

СЛУЧАЙНЫЕ ДАТЫ В PL / SQL

0 голосов
/ 17 апреля 2020

У меня есть вопрос о том, как можно произвольно вставить даты с помощью dmbs.random_value (minval, maxval) в pl / sql.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Вы можете использовать функцию NUMTODSINTERVAL, чтобы добавить количество единиц времени (дни / часы / минуты / секунды, в зависимости от ситуации) к времени эпохи. Например, если вы хотите иметь время между настоящим моментом и 1970-01-01, то вы можете рассчитать общее количество секунд между настоящим моментом и этой эпохой, используя:

( SYSDATE - DATE '1970-01-01' ) * 24 * 60 * 60

Затем вы можете использовать его в качестве аргумента для DBMS_RANDOM.VALUE:

INSERT INTO table_name ( value )
VALUES (
  DATE '1970-01-01'
  + NUMTODSINTERVAL(
      DBMS_RANDOM.VALUE(
        0,
        ( SYSDATE - DATE '1970-01-01' ) * 24 * 60 * 60
      ),
      'SECOND'
    )
);

Если вы хотите вставить несколько значений, вы можете повторить вставку или использовать SELECT с предложением CONNECT BY:

INSERT INTO table_name ( value )
SELECT DATE '1970-01-01'
       + NUMTODSINTERVAL(
           DBMS_RANDOM.VALUE(
             0,
             ( SYSDATE - DATE '1970-01-01' ) * 24 * 60 * 60
           ),
           'SECOND'
         )
FROM   DUAL
CONNECT BY LEVEL <= 9;

db <> скрипка здесь

0 голосов
/ 17 апреля 2020

Нечто подобное может помочь; устанавливается вставка 10 (строка № 4) случайно созданных значений даты (строка № 2) в диапазоне от 01.01.2020 (trunc(sysdate, 'yyyy') до 100 дней после этого (максимальное значение в dbms_random).

SQL> create table test (datum date);

Table created.

SQL> insert into test (datum)
  2  select trunc(sysdate, 'yyyy') + round(dbms_random.value(1, 100)) + level
  3  from dual
  4  connect by level <= 10;

10 rows created.

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select * from test;

DATUM
----------
02.04.2020
11.01.2020
16.01.2020
14.04.2020
07.04.2020
14.03.2020
29.01.2020
10.02.2020
26.03.2020
07.02.2020

10 rows selected.

SQL>
...