답변:
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)
trunc()
입력과 동일한 데이터 유형을 반환합니다 (매뉴얼에 명시된대로). 결과를 정수로 캐스트해야합니다.trunc(random() * 20)::int
random()
의 부정확 한 특성 으로 인해 9를 곱하면> = 9가되는 값 <1을 반환 할 수 있는지 궁금합니다 . 실제로 가능하더라도 15 자리 정도의 정밀도로 인해 당연히 사라질 가능성은 거의 없습니다.
요약하고 약간 단순화하려면 다음을 사용할 수 있습니다.
-- 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;
SELECT floor(random() * 10 + 1);
SQL Server를 사용하는 경우 정수를 얻는 올바른 방법은
SELECT Cast(RAND()*(b-a)+a as int);
어디
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
범위 [1, 10], 즉 1과 10을 모두 포함하는 INTEGER 출력을 생성합니다.
임의의 숫자 (부동 수)에 대해서는 user80168의 답변을 참조하십시오. 즉, INTEGER
.
이 저장 프로시 저는 테이블에 랜드 번호를 삽입합니다. 조심하세요, 그것은 끝없는 숫자를 삽입합니다. 충분한 숫자를 얻으면 실행을 중지하십시오.
커서에 대한 테이블을 만듭니다.
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