8
votes

Nombre aléatoire sur SQL sans utiliser NewID ()

Bonjour Je veux générer un nombre aléatoire unique sans utiliser à l'aide de l'instruction Suivre:

Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM] 


7 commentaires

Quelle base de données? Oracle? MSSQL? Mysql? PostgreSQL? De nombreuses bases de données ont déjà des fonctions aléatoires.


Quel est le problème? SIGNE? Pas de point flottant? Débordement? Il y a une raison pour laquelle nous utilisons TOWID () aussi: c'est probablement la meilleure solution


@Belel Escobedo, lorsque j'exécute votre commande: Sélectionnez Convertir (int, (CheckSum (NeufID ())) * 100000) Comme [Item] Je reçois: MSG 8115, niveau 16, état 2, ligne 1 erreur de débordement arithmétique convertissant l'expression au type de données Int.


Je ne peux pas utiliser la cause nouvelle () lorsque j'utilise une jointure, elle a généré une duplicité également si j'utilise Distinct Sélectionner une instruction


@Km Select Convert (int, rand (checksum (NewID ()) * 10000) en [élément] = 8114 pour moi SQL Server 8.0 (20000) SP 4


@ Angel: Il suffit de l'exécuter quelques fois de plus. Tout Int * 10000 débordera à un moment donné et de la somme de contrôle est déjà. Et où Rand vint-il dedans?


@ Angel Escobedo, je suppose que cela dépend de la valeur qui va de retourner (). J'ai couru checksum (NewID ()) dix fois ici sont les résultats: -819851858, 1696146331, 144198622907, 1772704734, -1169385946, -1065299277, -615333786, 1210149121 Essayez de les multiplier par 100 000. Je ne comprends pas le multiplier par 100 000, vous voulez juste des zéros supplémentaires à la fin?


6 Réponses :


0
votes

dans SQL Server Vous pouvez l'utiliser pour générer un numéro aléatoire ou un entier aléatoire entre les paramètres spécifiés

DECLARE @RandomNumber float
DECLARE @RandomInteger int
DECLARE @MaxValue int
DECLARE @MinValue int

SET @MaxValue = 4
SET @MinValue = 2

SELECT @RandomNumber = RAND()

SELECT @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue

SELECT @RandomNumber as RandomNumber, @RandomInteger as RandomInteger


1 commentaires

Je ne pense pas que cela entraînera un "nombre aléatoire unique"



-1
votes

Si vous utilisez MySQL

SELECT RANDOM();


0 commentaires


9
votes

est-il débordant?

CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) AS [ITEM]

CAST(CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) % 2100000000 AS int) AS [ITEM]


1 commentaires

Bonjour comment le jeter positif juste comme uint?



-1
votes

Colonne de mise à jour avec numéro à un chiffre xxx


0 commentaires

0
votes

OK, donc si vous ne voulez pas utiliser la fonction "NewID" pour générer un nombre aléatoire, vous pouvez utiliser la fonction "Rand", quelque chose comme ça serait randomish:

SELECT CAST(CAST(NEWID() AS VARBINARY(8)) AS BIGINT) 


0 commentaires