sql >> Databasteknik >  >> RDS >> Sqlserver

Generera unika slumptal med SQL

Jag antar att du skulle kunna göra något sådant här mycket enklare och mycket enklare

DECLARE @Upper INT;
DECLARE @Lower INT;
SET @Lower = 1;     /* -- The lowest random number */
SET @Upper = 49;    /* -- The highest random number */
    
    
SELECT @Lower + CONVERT(INT, (@[email protected]+1)*RAND());

För att få ett slumpmässigt tal utan upprepning kommer detta att göra jobbet

WITH CTE 
AS
(
    SELECT  randomNumber, COUNT(1) countOfRandomNumber
    FROM (
    SELECT ABS(CAST(NEWID() AS binary(6)) %49) + 1 randomNumber
    FROM sysobjects
    ) sample
    GROUP BY randomNumber
)
SELECT TOP 5 randomNumber
FROM CTE
ORDER BY newid() 

För att ställa in den högsta gränsen kan du ersätta 49 med ditt högsta gränsnummer.



  1. postgresql:.pgpass fungerar inte

  2. Oracle Query för att hitta icke-upprepade rader

  3. Snabbare sätt att infoga, via skript, i Oracle?

  4. hur infogar jag flera värden i mysql och undviker dubbletter