정수형 난수

최대값와 최소값을 포함할 때

@max -- 최대값
@min -- 최소값
SELECT CONVERT(INT, ((@max + 1) - @min) * RAND()  + @min)

또는

SELECT CAST(((@max + 1) - @min) * RAND()  + @min AS INT)



최대값을 포함하지 않고 최소값을 포함할 때

SELECT CONVERT(INT, (@max  - @min) * RAND()  + @min)

또는

SELECT CAST((@max  - @min) * RAND()  + @min AS INT)



최대값을 포함하지 않고 최소값을 포함하지 않을 때

SELECT CONVERT(INT, (@max - (@min + 1)) * RAND()  + (@min + 1))

또는

SELECT CAST((@max - (@min + 1)) * RAND()  + (@min + 1) AS INT)



실수형 난수

최대값와 최소값을 포함할 때

@max -- 최대값
@min -- 최소값
@roundnum -- 반올림 자릿수
SELECT ROUND((@max - @min) * RAND() + @min, @roundnum)



최대값을 포함하지 않고 최소값을 포함할 때

SELECT ROUND((((@max - (1.0 / POWER(10.0, roundnum))) )- @min) * RAND() + @min, @roundnum)


1.0 / POWER(10.0, roundnum)

최대값에서 이렇게 빼주는 이유는 최대값 바로 전 실수가 소수점 아래 수 @roundnum가

  • 2일 때 @max - 0.01
  • 3일 때 @max - 0.001

이렇게 되기 때문입니다.

최대값을 포함하지 않고 최소값을 포함하지 않을 때

SELECT ROUND((((@max - (1.0 / POWER(10.0, roundnum)))
            - (@min + (1.0 / POWER(10.0, roundnum))))
            * RAND() + (@min + (1.0 / POWER(10.0, roundnum)))
        , @roundnum)


저는 정수형 난수도 자주쓰고 실수형 난수도 자주 쓰고있는데요.
정수는 물건의 개수, 아이템의 개수 등에 쓰이고 실수는 확률 계산할 때 많이 쓰고있어요.😁
더 좋은 방법이나 오류가 있을땐 피드백 남겨주세요 감사합니다!