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
'source' 카테고리의 다른 글
정확히 파일이란 무엇입니까?플러시는? (0) | 2023.06.13 |
---|---|
장고 ORM 쿼리에서 SQL ''LIKE''에 해당하는 것은 무엇입니까? (0) | 2023.06.13 |
다양한 제품을 위한 구글 서비스.json 플레이버 (0) | 2023.06.13 |
R 스크립트에서 여러 줄로 코드 분할 (0) | 2023.06.13 |
장고를 통해 이메일을 보내는 방법은? (0) | 2023.06.13 |