Я хочу случайным образом выбрать значение из небольшого диапазона целых чисел ( менее 200). В качестве альтернативы
SELECT RAND()
я пытаюсь использовать
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT) / 65535
, но получаю некоторые странные эффекты.
Например:
WITH Numbers (num)
AS
(
SELECT num
FROM (
VALUES (1), (2), (3), (4),
(5), (6), (7), (8),
(9), (10)
) AS Numbers (num)
),
RandomNumber (num)
AS
(
SELECT CAST(
(CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT) / 65535)
* (SELECT COUNT(*) FROM Numbers) + 1
AS INTEGER
)
)
SELECT T1.num, R1.num
FROM Numbers AS T1
INNER JOIN RandomNumber AS R1
ON T1.num = R1.num;
Я ожидал, что это вернет ровно одну строку с одинаковыми значениями обоих столбцов.
Однако он возвращает ноль, одну или несколько строк, при этом значения столбцов лишь изредка совпадают.
Есть идеи, что здесь происходит?