table 中某一列的随机数

Random Numbers of a column of a table

我需要生成不在列中的随机数, 你能帮我吗。 table 是 MI_TABLA 该列是 MI_COLUMNA 非常感谢, 塞尔吉奥

您的问题中没有太多细节,但这可能会帮助您找到一条路。

下面的select得到一个0到500之间的随机值,我把round函数放进去,所以它是整数。

select round(dbms_random.value(0,500)) val
from dual
where round(dbms_random.value(0,500)) not in (select MI_COLUMNA from MI_TABLA);

如果随机数选择了您列中的一个值,它不会return任何东西。因此你可能想把它放在一个循环中,直到你得到一个数字。

SELECT to_number(to_char(CURRENT_TIMESTAMP,'yyyymmddhh24missffffff')) 来自双

这是一个长值,但不会生成重复的数字。

但这不是随机数。您不需要检查值是否存在

这是低效的,但可能会向您介绍一些您需要满足非常奇怪的要求的概念。

CREATE TABLE a_table (a_column NUMBER);

WITH params AS
       (SELECT 1 min_value,
               1000000 max_value
        FROM   DUAL),
     possible_values AS
       (SELECT ROWNUM + min_value - 1 a_value
        FROM   params
        CONNECT BY ROWNUM <= max_value - min_value + 1)
SELECT a_value
FROM   possible_values
WHERE  NOT EXISTS
         (SELECT 'value in table'
          FROM   a_table
          WHERE  a_table.a_column = a_value)
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;

它的作用是让您为 table 指定您想要的值范围,因为 "random number" 可以是任意大小。然后,它会找到该范围内 已经在 table 中的所有值,然后随机选择其中之一。

对于范围内有很多未使用值的 table,它会表现不佳,但对于只有少数未使用值的 table 会表现更好。