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 ...
이 방법의 몇 가지 단점은 다음과 같습니다.
- 이것은
NEWID()
방법 - 행당 한 번 평가 되더라도 쿼리 최적화 프로그램은 이상한 결과를 초래할 수있는 이를 인식하지 못합니다 .
그러나 다른 옵션으로 추가 할 것이라고 생각했습니다.
답변
다음과 같이 할 수 있습니다.
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)