다음을 통해 공유


RAND(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric의 SQL 데이터베이스

는 를 통해 1의사 난수 수동점 값을 0 반환합니다.

Transact-SQL 구문 표기 규칙

Syntax

RAND ( [ seed ] )

참고

이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

인수

seed

시드 값을 주는 정수 표현 식(tinyint, smallint, int)입니다. 시드를 지정하지 않으면 SQL Server 데이터베이스 엔진 시드 값을 임의로 할당합니다. 지정된 초기값에 대해 반환된 결과는 항상 동일합니다.

반환 형식

float

설명

시드 값이 RAND() 동일한 반복 호출은 동일한 결과를 반환합니다.

  • 한 연결의 경우 지정된 시드 값을 사용하여 호출되는 경우 RAND() 모든 후속 호출은 시드된 RAND() 호출 RAND() 을 기반으로 결과를 생성합니다. 예를 들어 다음 쿼리는 항상 동일한 숫자 시퀀스를 반환합니다.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • 또는 RAND() 쿼리에서 함수를 UPDATE 사용하면 INSERT 영향을 받는 모든 행이 동일한 값을 얻습니다.

예제

A. 네 가지 다른 난수를 만드세요

다음 예제에서는 함수에서 생성된 네 가지 난수를 생성 RAND() 합니다.

DECLARE @counter AS SMALLINT;

SET @counter = 1;

WHILE @counter < 5
    BEGIN
        SELECT RAND() AS RandomNumber;
        SET @counter = @counter + 1;
    END
GO

B. 무작위로 0 또는 1을 생성합니다

다음 예시는 이 ROUND() 함수를 사용하여 무작위로 또는 10 반환합니다.

SELECT ROUND(RAND(), 0) AS ZeroOrOne;
GO

참고

이 예에서 함수는 FLOOR() 항상 를 반환 0하고, 함수는 CEILING() 항상 를 반환 1한다.

C. 1보다 큰 난수를 생성하세요

함수에 RAND() 정수 값을 곱하면 무작위 플로터의 범위를 확장할 수 있습니다. 다음 예시는 와 10사이의 무작위 float0 를 반환합니다.

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT @Constant * RAND() AS RandomNumber;
GO

D. 임의 정수 생성

함수를 RAND() 스케일링하고 , FLOOR(), 또는 CEILING() 함수들과 ROUND()결합하여 무작위 정수 값을 생성할 수 있습니다. 다음 예시는 와 10사이의 무작위 정수를 0 반환합니다.

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT ROUND(@Constant * RAND(), 0) AS FirstRandomInteger,
       FLOOR(@Constant * RAND()) AS SecondRandomInteger,
       CEILING(@Constant * RAND()) AS ThirdRandomInteger;
GO

E. 테이블에 임의 값을 삽입합니다.

다음 예시는 테이블 변수에 무작위 정수, float, 비트 값을 채웁니다.

DECLARE @RandomTable TABLE (
    RandomIntegers INT,
    RandomFloats FLOAT,
    RandomBits BIT);

DECLARE @RowCount AS INT;
DECLARE @Counter AS INT;

SET @RowCount = 10;
SET @Counter = 1;

WHILE @Counter <= @RowCount
    BEGIN
        INSERT INTO @RandomTable
        VALUES (ROUND(10 * RAND(), 0), RAND(), CAST (ROUND(RAND(), 0) AS BIT));
        SET @Counter = @Counter + 1;
    END

SELECT *
FROM @RandomTable;
GO