Случайное число в SQL без использования NewID () - PullRequest
5 голосов
/ 11 февраля 2010

Здравствуйте, я хочу сгенерировать уникальное случайное число без использования следующего оператора:

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

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

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

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

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

Спасибо!

Ответы [ 5 ]

9 голосов
/ 11 февраля 2010

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

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]

Edit:

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

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

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

Но до сих пор не понимаю, почему вы пытаетесь присоединиться к уникальному случайному номеру ...

1 голос
/ 11 февраля 2010
0 голосов
/ 30 октября 2017

Обновить столбец с однозначным номером

update  [dbo].[AccomodationRatings]
set Rate =rand(CHECKSUM(NEWID()))*10
WHERE Rate >0
0 голосов
/ 11 февраля 2010

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

 SELECT RAND();

MySQL doc: http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

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

SELECT RANDOM();

Postgres doc: http://www.postgresql.org/docs/8.0/static/functions-math.html

0 голосов
/ 11 февраля 2010

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...