source

1 - 10 범위의 난수 생성

nicesource 2023. 6. 13. 22:24
반응형

1 - 10 범위의 난수 생성

문제에서 다룬 시험 문제에 대한 나의 접근 방식이 잘 되지 않았기 때문에, 나는 지금 다른 것을 시도하고 있습니다.페이지를 말할 수 있는 방법이 있습니까?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'는 하한입니다.

(불규칙함 * 10) % 10) + 1

히틀로다이어의 정답 버전입니다.

-- ERROR:  operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1

의 출력trunc로 변환해야 합니다.INTEGER하지만 그것은 그것 없이 이루어질 수 있습니다.trunc그래서 그것은 간단하다는 것이 밝혀졌습니다.

select (random() * 9)::INTEGER + 1

[1, 10] 범위(1 및 10 포함)의 INTERE 출력을 생성합니다.

숫자(플로트)에 대해서는 사용자 80168의 답변을 참조하십시오. 즉, 다음으로 변환하지 마십시오.INTEGER.

SELECT RAND()*(min-max)+max

Postgres를 사용하여 임의의 두 숫자 사이에 난수를 생성하는 방법은 다음과 같습니다.min그리고.max:

포함하여min및 제외max,

SELECT floor(random() * (max - min)) + min;

둘 다 포함min그리고.max,

SELECT floor(random() * (max - min + 1)) + min;

그래서 1과 10 사이의 숫자(10 포함)를 얻으려면,

최소값 = 1, 최대값 = 10

SELECT floor(random() * (10 - 1 + 1)) + 1;

일반적으로 이 공식을 사용하여 최소값과 최대값 사이의 임의 정수를 얻을 수 있습니다.

사실 당신이 이걸 하고 싶어하는지 모르겠어요.

이것을 먹어보세요.

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

테이블을 채웁니다.

EXEC RandNumbers

사용:

Select (ROW_NUMBER() OVER (ORDER BY ItemDesc ASC)+15000) as ID, ItemCode, ItemDesc

언급URL : https://stackoverflow.com/questions/1400505/generate-a-random-number-in-the-range-1-10

반응형