[sql] 3에서 6까지 임의의 정수 값 생성

Microsoft SQL Server에서 Min에서 Max까지 임의의 int 값을 생성 할 수 있습니까 (예 : 3-9 개, 15-99 등)

알아요, 0에서 최대까지 생성 할 수 있지만 최소 경계를 늘리는 방법은 무엇입니까?

이 쿼리는 1에서 6까지 임의의 값을 생성합니다. 3에서 6으로 변경해야합니다.

SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables

5 초 후 추가 :

어리석은 질문, 죄송합니다 …

SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables



답변

이것은 0-9 사이의 임의의 숫자를 생성합니다

SELECT ABS(CHECKSUM(NEWID()) % 10)

1 ~ 6

SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3 ~ 6

SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

동적 (Eilert Hjelmeseths 주석 기반)

SELECT ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min

댓글에 따라 업데이트 됨 :

  • NEWID 임의의 문자열 생성 (반환되는 각 행에 대해)
  • CHECKSUM 문자열 값을 취하고 숫자를 생성
  • 모듈러스 ( %)는 해당 숫자로 나누고 나머지를 반환합니다 (즉, 최대 값은 사용하는 숫자보다 하나 적음).
  • ABS 부정적인 결과를 긍정적으로 변경
  • 그런 다음 결과에 하나를 추가하여 0 개의 결과를 제거합니다 (주사위 굴림 시뮬레이션).

답변

SQL Server 2008에서 질문에 대한 답변을 추가 한 것을 확인했습니다.

SELECT 3 + CRYPT_GEN_RANDOM(1) % 4 /*Random number between 3 and 6*/
FROM ...

이 방법의 몇 가지 단점은 다음과 같습니다.

  1. 이것은 NEWID() 방법
  2. 행당 한 번 평가 되더라도 쿼리 최적화 프로그램은 이상한 결과를 초래할 수있는 이를 인식하지 못합니다 .

그러나 다른 옵션으로 추가 할 것이라고 생각했습니다.


답변

다음과 같이 할 수 있습니다.

DECLARE @maxval TINYINT, @minval TINYINT
select @maxval=24,@minval=5

SELECT CAST(((@maxval + 1) - @minval) *
    RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)

그리고 그것은 이 링크 에서 직접 가져온 것이므로이 답변에 대해 적절한 크레딧을 제공하는 방법을 정말로 모릅니다.


답변

Pinal Dave의 사이트에서 멋지고 간단합니다.

http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/

DECLARE @Random INT;
DECLARE @Upper INT;
DECLARE @Lower INT
SET @Lower = 3 ---- The lowest random number
SET @Upper = 7 ---- One more than the highest random number
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)
SELECT @Random

(1을 더한 상위 숫자를 포함하도록 @ Upper-를 약간 변경했습니다.)


답변

간단히:

DECLARE @MIN INT=3; --We define minimum value, it can be generated.
DECLARE @MAX INT=6; --We define maximum value, it can be generated.

SELECT @MIN+FLOOR((@MAX-@MIN+1)*RAND(CONVERT(VARBINARY,NEWID()))); --And then this T-SQL snippet generates an integer between minimum and maximum integer values.

필요에 따라이 코드를 변경하고 편집 할 수 있습니다.


답변

다음은 간단하고 한 줄의 코드입니다.

이를 위해 SQL Inbuild RAND () 함수를 사용하십시오.

다음은 두 숫자 사이에서 난수를 생성하는 공식입니다 (RETURN INT 범위).

여기서 a는 첫 번째 숫자 (최소)이고 b는 범위의 두 번째 숫자 (최대)입니다.

SELECT FLOOR(RAND()*(b-a)+a)

참고 : CAST 또는 CONVERT 함수를 사용하여 INT 범위 번호를 가져올 수도 있습니다.

(CAST (RAND () * (25-10) +10 AS INT))

예:

SELECT FLOOR(RAND()*(25-10)+10);

다음은 두 숫자 사이에서 난수를 생성하는 공식입니다 (RETURN DECIMAL 범위).

SELECT RAND()*(b-a)+a;

예:

SELECT RAND()*(25-10)+10;

자세한 내용은 https://www.techonthenet.com/sql_server/functions/rand.php를 확인하십시오.


답변

SELECT ROUND((6 - 3 * RAND()), 0)