Возможно ли в Microsoft SQL Server сгенерировать случайное значение int от Min до Max (пример 3-9, 15-99 и т. Д.)
Я знаю, я могу сгенерировать от 0 до Max, но как увеличить минимальную границу?
Этот запрос генерирует случайное значение от 1 до 6. Необходимо изменить его с 3 на 6.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Добавлено через 5 секунд :
Глупый вопрос, извините ...
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
sql
sql-server
sql-server-2008
FSou1
источник
источник
Ответы:
Это генерирует случайное число от 0 до 9.
С 1 по 6
С 3 по 6
Динамический (на основе комментария Эйлерта Хьельмесета)
Обновлено на основе комментариев:
NEWID
генерирует случайную строку (для каждой строки в ответ)CHECKSUM
принимает значение строки и создает число%
) делится на это число и возвращает остаток (то есть максимальное значение на единицу меньше, чем используемое вами число)ABS
меняет отрицательные результаты на положительныеисточник
ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
. Несколько тестов с моей стороны дали хорошие результаты. Если это действительно так, я думаю, что этот ответ можно немного улучшить, включив его.Я вижу, вы добавили ответ на свой вопрос в SQL Server 2008, вы также можете сделать
Пара недостатков этого метода:
NEWID()
методно просто подумал, что добавлю это как другой вариант.
источник
CRYPT_GEN_RANDOM
он действительно предназначен для ситуаций, когда вам нужно более криптографически безопасное псевдослучайное число.Ты можешь сделать это:
И это было взято прямо из этой ссылки , я действительно не знаю, как отдать должное этому ответу.
источник
Красиво и просто, с сайта Пинала Дэйва:
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
(Я немного изменил @ Upper-, чтобы включить верхнее число, добавил 1.)
источник
Просто:
Вы можете изменить и отредактировать этот код под свои нужды.
источник
Вот простая и единственная строка кода
Для этого используйте SQL Inbuild RAND () .
Вот формула для генерации случайного числа между двумя числами (RETURN INT Range)
Здесь a - ваше первое число (мин.), А b - второе число (макс.) В диапазоне.
Примечание: вы также можете использовать функцию CAST или CONVERT, чтобы получить номер диапазона INT.
(CAST (RAND () * (25-10) +10 AS INT))
Пример:
Вот формула для генерации случайного числа между двумя числами (RETURN DECIMAL Range)
Пример:
Подробнее проверьте это: https://www.techonthenet.com/sql_server/functions/rand.php
источник
источник
SELECT ROUND((6 - 3 * 0.16), 0) SELECT ROUND((6 - 3 * 0.17), 0) SELECT ROUND((6 - 3 * 0.5), 0) SELECT ROUND((6 - 3 * 0.51), 0) SELECT ROUND((6 - 3 * 0.83), 0) SELECT ROUND((6 - 3 * 0.84), 0)
показывает, что изменение на 16% для 6, ~ 34% это 5, ~ 34% это 4 и ~ 16% это 3.Ответ Ламака как функция:
источник
Шаг за шагом
Обратите внимание, что определяемая пользователем функция, таким образом, не позволяет использовать RAND (). Обходной путь для этого (источник: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/ ) - сначала создать представление.
а затем создайте случайную функцию
источник
В основном:
На ваш вопрос:
<=>
источник