복붙노트

[SQL] 3에서 6 무작위 int 값을 생성

SQL

3에서 6 무작위 int 값을 생성

마이크로 소프트 SQL 서버에서 가능가 최대로 최소에서 임의 int 값을 생성 (3-9 예, 15-99 e.t.c)

난 내가 최대 0에서 생성 할 수 있습니다 알고 있지만, 어떻게 최소의 경계를 증가?

이는 1 ~ 3에서 6으로 변경 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

해결법

  1. ==============================

    1.이것은 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
    

    동적 (EILERT Hjelmeseths 주석 기준)

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

    의견에 따라 업데이트 :

  2. ==============================

    2.난 당신이 SQL Server의 질문에 대한 답을 추가 한 참조 2008 당신도 할 수있다

    난 당신이 SQL Server의 질문에 대한 답을 추가 한 참조 2008 당신도 할 수있다

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

    이 방법의 단점 몇 가지 있습니다

    하지만 그냥 또 다른 옵션으로 추가 할 거라고 생각했다.

  3. ==============================

    3.이 작업을 수행 할 수 있습니다 :

    이 작업을 수행 할 수 있습니다 :

    DECLARE @maxval TINYINT, @minval TINYINT
    select @maxval=24,@minval=5
    
    SELECT CAST(((@maxval + 1) - @minval) *
        RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)
    

    그리고이 링크에서 직접 찍은 그, 난 정말이 답변에 대한 적절한 신용을 제공하는 방법을 모르겠어요.

  4. ==============================

    4.PINAL 데이브의 사이트에서 니스와 간단한 :

    PINAL 데이브의 사이트에서 니스와 간단한 :

    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
    

    (I는 상위 번호를 포함하는 대문자 @받는 약간의 변화를 확인했다 1. 추가)

  5. ==============================

    5.간단히:

    간단히:

    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.
    

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

  6. ==============================

    6.여기에 간단한 코드의 한 줄입니다

    여기에 간단한 코드의 한 줄입니다

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

    여기서 두 숫자 사이의 난수를 생성하는 공식은 (RETURN INT 범위)

    여기에 귀하의 첫 번째 숫자 (최소)입니다 b는 범위에서 두 번째 번호 (최대)이다

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

    참고 : INT 범위 번호를 얻을뿐만 아니라 CAST 또는 CONVERT 기능을 사용할 수 있습니다.

    (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

  7. ==============================

    7.

    SELECT ROUND((6 - 3 * RAND()), 0)
    
  8. ==============================

    8.함수로 Lamak의 대답 :

    함수로 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
    
  9. ==============================

    9.

    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;
    

    사용자 정의 기능은 따라서 RAND의 사용을 허용하지 않는 것이 주 (). 이 (소스 : 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
    
  10. ==============================

    10.일반적으로 :

    일반적으로 :

    select rand()*(@upper-@lower)+@lower;
    

    귀하의 질문의 경우 :

    select rand()*(6-3)+3;
    

    <=>

    select rand()*3+3;
    
  11. from https://stackoverflow.com/questions/7878287/generate-random-int-value-from-3-to-6 by cc-by-sa and MIT license