3에서 6 사이의 랜덤 int 값 생성
Microsoft SQL Server에서 최소값에서 최대값까지 임의의 int 값을 생성할 수 있습니까(3-9 예제, 15-99 e.t.c).
알아요, 0부터 최대까지 생성할 수 있는데, Min 테두리를 어떻게 늘립니까?
이 쿼리는 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
유용한 편집자가 각 문 앞에 'Select'를 추가했지만, 이 항목의 요점은 하나의 항목만이 아니라 각 행에 대한 고유한 키를 반환으로 생성할 수 있다는 것입니다(이를 위해 Rand() 함수를 사용합니다).예:tblExample에서 상위 100 랜드(),* 선택
모든 100개 행에 대해 동일한 랜덤 값을 반환합니다.
한편: tble 예제에서 상위 100개 ABS(CHECKSUM(NEWID()) %10)를 선택하십시오(*).
반환되는 각 행에서 0과 9 사이의 다른 랜덤 값을 반환합니다.따라서 선택하면 복사 및 붙여넣기가 쉬워지지만 필요한 경우 논리를 선택 문에 복사할 수 있습니다.
0-9 사이의 난수가 생성됩니다.
SELECT ABS(CHECKSUM(NEWID()) % 10)
1 ~ 6
SELECT ABS(CHECKSUM(NEWID()) % 6) + 1
3 ~ 6
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3
Dynamic (Eilert Hjelmesh Comment 기반 - 시각적 프레젠테이션을 제공해 준 jiraiya 덕분)
SELECT ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
주석을 기반으로 업데이트됨:
NEWID임의 문자열을 생성합니다(반복하는 각 행에 대해).CHECKSUM문자열 값을 사용하여 숫자를 만듭니다.- 계수(
%) 해당 숫자로 나누고 나머지를 반환합니다(최대 값이 사용하는 숫자보다 1 더 작음). ABS부정적인 결과를 긍정적인 결과로 변경- 그런 다음 결과에 하나를 추가하여 0개의 결과를 제거합니다(다이스 롤 시뮬레이션).
SQL Server 2008에서 질문에 대한 답변을 추가했습니다.
SELECT 3 + CRYPT_GEN_RANDOM(1) % 4 /*Random number between 3 and 6*/
FROM ...
이 방법의 몇 가지 단점은
다른 선택사항으로 추가할 거라고 생각했어요
다음을 수행할 수 있습니다.
DECLARE @maxval TINYINT, @minval TINYINT
select @maxval=24,@minval=5
SELECT CAST(((@maxval + 1) - @minval) *
RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)
그리고 그것은 이 링크에서 직접 가져온 것입니다. 저는 이 대답에 대해 어떻게 적절한 신용을 부여해야 할지 잘 모르겠습니다.
여기 단순하고 단일한 코드 줄이 있습니다.
이를 위해 SQL Inbuild RAND() 함수를 사용합니다.
다음은 두 숫자 사이의 난수를 생성하는 공식입니다(RETURN INT Range).
여기서 a는 첫 번째 숫자(최소)이고 b는 범위의 두 번째 숫자(최대)입니다.
SELECT FLOOR(RAND()*(b-a)+a)
참고: CAST 또는 CONVERT 기능을 사용하여 INT 범위 번호를 얻을 수도 있습니다.
( 주형(RAND()*(25-10)+10 AS INT)
예:
SELECT FLOOR(RAND()*(25-10)+10);
다음은 두 숫자 사이의 난수를 생성하는 공식입니다(RETURN DECTION Range).
SELECT RAND()*(b-a)+a;
예:
SELECT RAND()*(25-10)+10;
자세한 내용은 다음을 참조하십시오. https://www.techonthenet.com/sql_server/functions/rand.php
단순:
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.
필요에 따라 이 코드를 변경하고 편집할 수 있습니다.
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-를 약간 변경했습니다.)
일반적으로:
select rand()*(@upper-@lower)+@lower;
질문에 대하여:
select rand()*(6-3)+3;
<=>
select rand()*3+3;
SELECT ROUND((6 - 3 * RAND()), 0)
함수로서 Lamak의 답변:
-- Create RANDBETWEEN function
-- Usage: SELECT dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID())))
CREATE FUNCTION dbo.RANDBETWEEN(@minval TINYINT, @maxval TINYINT, @random NUMERIC(18,10))
RETURNS TINYINT
AS
BEGIN
RETURN (SELECT CAST(((@maxval + 1) - @minval) * @random + @minval AS TINYINT))
END
GO
DECLARE @min INT = 3;
DECLARE @max INT = 6;
SELECT @min + ROUND(RAND() * (@max - @min), 0);
단계별
DECLARE @min INT = 3;
DECLARE @max INT = 6;
DECLARE @rand DECIMAL(19,4) = RAND();
DECLARE @difference INT = @max - @min;
DECLARE @chunk INT = ROUND(@rand * @difference, 0);
DECLARE @result INT = @min + @chunk;
SELECT @result;
따라서 사용자 정의 함수는 랜드()의 사용을 허용하지 않습니다.이에 대한 해결 방법(출처: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/) 은 먼저 보기를 만드는 것입니다.
CREATE VIEW [dbo].[vw_RandomSeed]
AS
SELECT RAND() AS seed
그런 다음 임의의 함수를 만듭니다.
CREATE FUNCTION udf_RandomNumberBetween
(
@min INT,
@max INT
)
RETURNS INT
AS
BEGIN
RETURN @min + ROUND((SELECT TOP 1 seed FROM vw_RandomSeed) * (@max - @min), 0);
END
언급URL : https://stackoverflow.com/questions/7878287/generate-random-int-value-from-3-to-6
'programing' 카테고리의 다른 글
| Express.js: 원격 클라이언트 주소를 가져오는 방법 (0) | 2023.05.14 |
|---|---|
| OK(확인) 및 Cancel(취소)이 표시된 신속한 경고 보기: 어떤 버튼을 눌렀습니까? (0) | 2023.05.14 |
| node.js에서 파일을 이동하려면 어떻게 해야 합니까? (0) | 2023.05.14 |
| Grep '이진 파일 일치'입니다.정상적인 grep 출력을 얻는 방법은 무엇입니까? (0) | 2023.05.14 |
| Windows 사용자 표시 이름 가져오기 (0) | 2023.05.14 |