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]
6 Réponses :
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
Je ne pense pas que cela entraînera un "nombre aléatoire unique"
Si vous utilisez MySQL
SELECT RANDOM();
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]
Bonjour comment le jeter positif juste comme uint?
Colonne de mise à jour avec numéro à un chiffre
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)
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] B> 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. B>
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 ()) i> dix fois ici sont les résultats: -819851858, 1696146331, 144198622907, 1772704734, -1169385946, -1065299277, -615333786, 1210149121 I> 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?