Поскольку мой подход к тестовому запросу, который я работал в этом вопросе, не сработал, я сейчас что-то пробую. Есть ли способ сообщить pg random()
функцию, чтобы получить только числа от 1 до 10?
Генерировать случайное число в диапазоне 1 - 10
Ответ 1
Если по номерам от 1 до 10 вы имеете в виду любой float, который равен >= 1 и < 10, то это легко:
select random() * 9 + 1
Это можно легко протестировать с помощью:
# select min(i), max(i) from (
select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
min | max
-----------------+------------------
1.0000083274208 | 9.99999571684748
(1 row)
Если вам нужны целые числа, которые >= 1 и < 10, то это просто:
select trunc(random() * 9 + 1)
И снова простой тест:
# select min(i), max(i) from (
select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
min | max
-----+-----
1 | 9
(1 row)
Ответ 2
Чтобы суммировать и немного упростить, вы можете использовать:
-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);
И вы можете проверить это, как указано в @user80168
-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
Ответ 3
Если вы используете SQL Server, то правильный способ получить целое число
SELECT Cast(RAND()*(b-a)+a as int);
Где
- 'b' - верхний предел
- 'a' - нижний предел
Ответ 4
(trunc (random() * 10)% 10) + 1
Ответ 5
На самом деле я не знаю, что вы хотите.
попробуйте это
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
Ответ 6
Эта хранимая процедура вставляет rand-число в таблицу. Послушайте, он вставляет бесконечные числа. Прекратите выполнение, когда u получите достаточное количество чисел.
создать таблицу для курсора:
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
ГО
Создайте таблицу, которая будет содержать ваши номера:
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
ВСТАВКА SCRIPT:
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
СОЗДАНИЕ И ИСПОЛНЕНИЕ ПРОЦЕДУРЫ:
CREATE PROCEDURE [dbo].[RandNumbers] AS
BEGIN
Declare CURSE CURSOR FOR (SELECT [Cursor] FROM [dbo].[SearchIndex] WHERE [Cursor] IS NOT NULL)
DECLARE @RandNoSscript NVARCHAR (250)
OPEN CURSE
FETCH NEXT FROM CURSE
INTO @RandNoSscript
WHILE @@FETCH_STATUS IS NOT NULL
BEGIN
Print @RandNoSscript
EXEC SP_EXECUTESQL @RandNoSscript;
END
END
GO
Заполните таблицу:
EXEC RandNumbers
Ответ 7
Правильная версия ответа hythlodayr.
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
Выход из trunc
должен быть преобразован в INTEGER
. Но это можно сделать без trunc
. Таким образом, это оказывается простым.
select (random() * 9)::INTEGER + 1
Генерирует вывод INTEGER в диапазоне [1, 10], то есть как 1, так и 10 включительно.
Для любого числа (поплавки) см. ответ user80168. я просто не конвертирую его в INTEGER
.