Поскольку мой подход для тестового запроса, над которым я работал над этим вопросом , не сработал, я сейчас пробую что-то другое. Есть ли способ указать random()
функции pg получать мне только числа от 1 до 10?
sql
postgresql
random
KB22
источник
источник
trunc()
возвращает тот же тип данных, что и входные (как указано в руководстве). Вам нужно преобразовать результат в целое число:trunc(random() * 20)::int
random()
вернуть значение <1, которое при умножении на 9 будет> = 9 из-за неточной природы типа двойной точности ? На практике, даже если это возможно, это, конечно, было бы маловероятным из-за точности в 15 или около того.width_bucket(random(), 0, 1, 10)
альтернативойПодводя итог и немного упрощая, вы можете использовать:
-- 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;
источник
ceil(random() * 10)
результате 0 - я бы придерживатьсяfloor
.SELECT floor(random() * 10 + 1);
Если вы используете SQL Server, то правильный способ получить целое число:
SELECT Cast(RAND()*(b-a)+a as int);
куда
источник
(усечение (случайное () * 10)% 10) + 1
источник
Правильная версия ответа 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
.источник
На самом деле я не знаю, что вы этого хотите.
попробуй это
INSERT INTO my_table (my_column) SELECT (random() * 10) + 1 ;
источник
Эта хранимая процедура вставляет случайное число в таблицу. Смотри, он вставляет бесконечные числа. Прекратите выполнять его, когда наберете достаточно чисел.
создать таблицу для курсора:
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)
ВСТАВКА СКРИПТА:
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
Заполните свою таблицу:
источник