Случайное число на SQL, не используя NewID ()

Привет я хочу генерировать Уникальное Случайное число с использованием следовать оператора:

Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM] 

Причина, когда я использую пункты соединений на "от" него, генерирует двойные регистры при помощи NEWID ()

Я использую SQL Server 2000

*PD: Когда я использую Rand (), это, вероятно, повторяет на вероятности 1 из 100000000, но это настолько очень важно, таким образом, это должны быть 0% вероятности для повторения случайного сгенерированного значения

Мой Запрос с NewID () и результат на операторе SELECT дублирован (x2) Мой Запрос без NewID () и использование, Rand () на операторе SELECT является единственным (x1), но вероятность повторения случайное сгенерированное значение неопределенно, но существует!

Спасибо!

7
задан gbn 18 February 2010 в 19:46
поделиться

4 ответа

Это переполнение?

CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) AS [ITEM]

CAST(CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) % 2100000000 AS int) AS [ITEM]

Редактировать:

Нет такой вещи, как 0% шанс дублирования числа

CHECKSUM (NEWID ())) возвращает целое число, которое имеет 4 миллиарда строк . Парадокс дня рождения означает, конечно, что вероятность столкновения намного выше.

Bigint (вверху) или десятичное число (38,0) дают вам гораздо больше возможностей для игры, но только уменьшают вероятность столкновения, но никогда не устраняют его.

Но все еще не понимаю, почему вы пытаетесь ПРИСОЕДИНИТЬСЯ с уникальным случайным числом ...

9
ответ дан 7 December 2019 в 05:22
поделиться

В SQL Server вы можете использовать это для генерации случайного числа или случайного целого числа между указанными параметрами

DECLARE @RandomNumber float
DECLARE @RandomInteger int
DECLARE @MaxValue int
DECLARE @MinValue int

SET @MaxValue = 4
SET @MinValue = 2

SELECT @RandomNumber = RAND()

SELECT @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue

SELECT @RandomNumber as RandomNumber, @RandomInteger as RandomInteger
0
ответ дан 7 December 2019 в 05:22
поделиться

Если вы используется MySQL

 SELECT RAND();

Документ MySQL: http://dev.mysql.com/doc/refman/5.0/en/mat Mathematical-functions.html#function_rand

Если вы с использованием Postgres

SELECT RANDOM();

Документ Postgres: http://www.postgresql.org/docs/8.0/static/functions-math.html

-1
ответ дан 7 December 2019 в 05:22
поделиться