Poiché il mio approccio per una query di prova su cui ho lavorato in this question non ha funzionato, sto provando qualcos'altro ora. C'è un modo per dire la funzione random()
di pg per ottenere solo numeri tra 1 e 10?Genera un numero casuale nell'intervallo 1 - 10
risposta
Se da numeri compresi tra 1 e 10 si intende qualsiasi galleggiante che è> = 1 e < 10, allora è facile:
select random() * 9 + 1
Questo può essere facilmente testato con:
# select min(i), max(i) from (
select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
min | max
-----------------+------------------
1.0000083274208 | 9.99999571684748
(1 row)
Se volete numeri interi, che sono> = 1 e < 10, allora è semplice:
select trunc(random() * 9 + 1)
E ancora, semplice test:
# select min(i), max(i) from (
select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
min | max
-----+-----
1 | 9
(1 row)
(trunc (random() * 10)% 10) + 1
ERRORE: operatore non esiste: doppia precisione% intero –
E perché si dovrebbe utilizzare il modulo in ogni caso? Questa logica non ha senso. Se ottieni un "involucro" non avrai la stessa distribuzione, e se non ne ottieni, non ne hai bisogno. – ErikE
In realtà non so che si desidera questo.
provare questo
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
Per riassumere e un po 'semplificare, si può usare:
-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);
E si può verificare questo, come citato da @ user80168
-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
I documenti [dicono] (https://www.postgresql.org/docs/10/static/functions-math.html) "valore casuale nell'intervallo 0.0 <= x <1.0", per cui v'è almeno un teorico possibilità di 'ceil (random() * 10)' risultante in 0 - Mi attaccherei a 'floor'. –
Se stanno usando SQL Server, quindi il modo corretto per ottenere l'intero è
SELECT Cast(RAND()*(b-a)+a as int);
Dove
- 'b' è il limite superiore
- 'a' è limite inferiore
Fai attenzione qui, se metti il limite inferiore come 1 e quello superiore come 10, otterrai solo numeri 1-> 9. Altre risposte sembrano assumere che tra 1 e 10 significa 1-> 9 ... Suggerirei se 'tra' esclude il limite superiore, dovrebbe anche escludere il più basso (cioè 2-> 9). SELECT Cast (RAND() * ((b + 1) -a) + a as int); – Morvael
Questa stored procedure inserisce un numero rand in una tabella. Attenzione, inserisce un numero infinito. Smetti di eseguirlo quando ottieni abbastanza numeri.
creare una tabella per il cursore:
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
GO
Creare una tabella per contenere i numeri:
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
INSERIMENTO DELLA SCENEGGIATURA:
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
CREAZIONE E E XECUTING LA PROCEDURA:
CREATE PROCEDURE [dbo].[RandNumbers] AS
BEGIN
Declare CURSE CURSOR FOR (SELECT [Cursor] FROM [dbo].[SearchIndex] WHERE [Cursor] IS NOT NULL)
DECLARE @RandNoSscript NVARCHAR (250)
OPEN CURSE
FETCH NEXT FROM CURSE
INTO @RandNoSscript
WHILE @@FETCH_STATUS IS NOT NULL
BEGIN
Print @RandNoSscript
EXEC SP_EXECUTESQL @RandNoSscript;
END
END
GO
Riempire la vostra tavola:
EXEC RandNumbers
La domanda riguarda Postgres, non SQL Server –
La versione corretta della risposta di hythlodayr.
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
L'uscita dal trunc
deve essere convertito in INTEGER
. Ma può essere fatto senza trunc
. Quindi risulta essere semplice.
select (random() * 9)::INTEGER + 1
Genera un'uscita numero intero nell'intervallo [1, 10] cioè sia 1 & 10 compreso.
per qualsiasi numero (carri), si veda la risposta di user80168. non lo converto in INTEGER
.
- 1. elm genera un numero casuale
- 2. Genera un numero casuale compreso tra 1 e 10 ad eccezione di un numero singolo in matlab
- 3. Genera un numero casuale da un altro numero
- 4. Genera un numero casuale a N cifre
- 5. Genera un numero casuale univoco per ciascun valore di matrice
- 6. Numero casuale: 0 o 1
- 7. Genera un numero casuale con un numero casuale in Objective-C
- 8. generare un numero casuale compreso tra 1 e 10 in c
- 9. Genera un numero casuale con una distribuzione non uniforme
- 10. Genera un numero casuale nell'intervallo [M .... N] con media X
- 11. genera un numero intero casuale a 64 bit
- 12. Genera un numero casuale nel modulo del kernel
- 13. Genera matrice binaria casuale
- 14. Numero casuale in un loop
- 15. C++ Numero casuale da 1 a un numero molto elevato (ad esempio 25 milioni)
- 16. casuale genera numero 1 oltre il 90% di volte in parallelo
- 17. Selezionare un numero casuale un numero casuale di volte, ma mai lo stesso numero casuale due volte
- 18. Genera numero di 10 cifre usando una tastiera telefonica
- 19. numero casuale Javascript?
- 20. Genera indirizzo IP casuale
- 21. Numero casuale in sdk per iphone?
- 22. Genera un numero casuale in C all'interno di un intervallo e un passaggio specifico
- 23. AGGIORNAMENTO MySQL con numero casuale compreso tra 1-3
- 24. Numero casuale da un seme
- 25. Ruby, genera un colore esadecimale casuale
- 26. Genera numero casuale compreso tra due numeri con una rara numero
- 27. Numero casuale rapido
- 28. Genera data di nascita casuale
- 29. Numero casuale positivo o negativo JavaScript
- 30. Numero intero casuale Javascript tra due numeri
selezionare la data (e.created_at) + (trunc (random() * 20)) dagli eventi e; risultato: ERRORE: operatore non esiste: Data + doppia precisione Does trunc tornare davvero interi? –
'trunc()' restituisce lo stesso tipo di dati dell'input (come indicato nel manuale). È necessario trasmettere il risultato a un intero: 'trunc (random() * 20) :: int' –
Mi chiedo se, almeno in teoria, sia possibile che' random() 'restituisca un valore <1 che moltiplicato per 9 sarebbe> = 9 a causa della [natura inesatta del tipo a doppia precisione] (http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-FLOAT)? In pratica, anche se fosse possibile sarebbe ovviamente improbabile, a causa delle 15 cifre o della precisione. –