1-10 범위의 난수 생성
이 질문 에서 작업 한 테스트 쿼리에 대한 접근 방식 이 효과 가 없었기 때문에 지금은 다른 것을 시도하고 있습니다. pg의 random()
함수에 1과 10 사이의 숫자 만 가져 오도록 지시하는 방법이 있습니까?
1에서 10 사이의 숫자로> = 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)
요약하고 약간 단순화하려면 다음을 사용할 수 있습니다.
-- 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;
SQL Server를 사용하는 경우 정수를 얻는 올바른 방법은
SELECT Cast(RAND()*(b-a)+a as int);
어디
- 'b'는 상한입니다.
- 'a'는 하한입니다.
(trunc (random () * 10) % 10) + 1
hythlodayr의 대답의 올바른 버전.
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
The output from trunc
has to be converted to INTEGER
. But it can be done without trunc
. So it turns out to be simple.
select (random() * 9)::INTEGER + 1
Generates an INTEGER output in range [1, 10] i.e. both 1 & 10 inclusive.
For any number (floats), see user80168's answer. i.e just don't convert it to INTEGER
.
Actually I don't know you want to this.
try this
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
This stored procedure inserts a rand number into a table. Look out, it inserts an endless numbers. Stop executing it when u get enough numbers.
create a table for the cursor:
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
GO
Create a table to contain your numbers:
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
INSERTING THE SCRIPT :
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
CREATING AND EXECUTING THE PROCEDURE:
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
Fill your table:
EXEC RandNumbers
참고URL : https://stackoverflow.com/questions/1400505/generate-a-random-number-in-the-range-1-10
'programing tip' 카테고리의 다른 글
HTTP의 숨겨진 기능 (0) | 2020.09.15 |
---|---|
Nonetype을 정수 또는 문자열로 변환하는 방법은 무엇입니까? (0) | 2020.09.15 |
svn diff를 만드는 방법 두 개정 사이에 공백이 아닌 줄 변경 만 표시 (0) | 2020.09.14 |
npm을 사용하여 rubygems 용 번 들러처럼 필수 패키지를 설치하거나 업데이트합니다. (0) | 2020.09.14 |
matplotlib의 그림 내에서 각 플롯 된 선에 대해 새 색상을 선택하는 방법은 무엇입니까? (0) | 2020.09.14 |