2016-07-22 6 views
1

Ich möchte eine INSER INTO-Anweisung tun, aber ich brauche einige Felder Zufallszahlen zu erzeugen jedes Mal: ​​BeispielMYSQL INSERT mit zufälligen Werten zwischen 1 bis 5

INSERT INTO table_name (column1,column2,column3,...) 
VALUES (value1,RAND NUMBER,RAND NUMBER,...); 

Also jedes Mal tritt er in eine Zufallszahl in Spalten beim Erstellen eines neuen Datensatzes. SO die meisten Werte werden statisch sein, aber einige müssen RAND zwischen einer Zahl von beispielsweise 1 -5 oder 1000 - 5000 sein.

Irgendwelche Hilfe?

+0

[Dieser Link] (http://www.techonthenet.com/mysql/functions/rand.php) zeigt Ihnen, wie 'RAND() verwenden' eine Zufallszahl innerhalb eines erzeugen Angebot. Sie können dies einfach in Ihre INSERT-Anweisung einfügen. –

+0

Ich habe versucht, so in den Werten habe ich Werte ('511222', RAND() * (5-1) +1, '323632') Weil ich Nummern zwischen 1 und 5. mit MYSQL Arbeitsbank nicht sicher, ob das macht ein Unterschied – Speedychuck

+0

@Speedychuck hat das nicht funktioniert? – apokryfos

Antwort

2

Mit dieser Funktion sollte funktionieren:

FLOOR(min+RAND()*(max-min)) 

INSERT INTO table_name (column1,column2,column3,...) 
VALUES (value1,SELECT FLOOR(5+RAND()*(1-5)),SELECT FLOOR(5+RAND()*(1-5)),...); 
+0

Wie würde das in der insert-Anweisung aussehen? @Zoidburg – Speedychuck

+0

Probieren Sie dies einfach aus: 1582 inkorrekte Parameteranzahl beim Aufruf des nativen Funktionsbodens. – Speedychuck

+1

Brauchen Sie eine zusätzliche ')' nach '(10-100)' – apokryfos

0

Take a look at this.

Sie können mit RAND(), aber wie heißt es in der documentation,

Wenn Samen nicht angegeben ist, ordnet der SQL Server-Datenbank-Engine einen Seed-Wert zufällig. Bei einem angegebenen Startwert ist das zurückgegebene Ergebnis immer gleich.

Hoffnung, dies hilft Ihnen

EDIT:

Also, wenn Sie es in der INSERT INTO verwenden möchten .... Ich gehe davon aus

INSERT INTO table_name (column1, column2, column3,...) 
VALUES (value1, RAND(CAST(NEWID() AS varbinary)) * 5, RAND(CAST(NEWID() AS varbinary)) * 1000,...) 

Wenn diese Hilfe tut , Daumen nach unten, wie ich von dem gehe, was ich zuerst versuchen würde und ich nicht testen

+0

Müssen wissen, wie man es in einem INSERT INTO verwendet :(also wenn ich den Einfügevorgang verwende, erzeuge ich die Nummer zwischen 1 und 5 für diese Spalte – Speedychuck

+0

Schau dir meinen Schnitt an, probier es aus .... du musst den runden runden Wenn Sie eine ganze Zahl haben wollen –

+0

CAST (FLOOR (5 + RAND() * (1-5) AS CHAR) Funktioniert jetzt, aber wenn ich überprüfe, was die Spalte akzeptiert, ist es ein TINYINT, also erzeugt FLOOR RAND die Nummer dazwischen 1 und 5 wird aber nicht in die Spalte einfügen, da es versucht, ein INT hinzuzufügen, das dann in einen String konvertiert wird.Wie kann ich hinzufügen, da TINYINT meine Probleme ist. @Alex Grogan – Speedychuck

0

einfügen so Ich reihe mit Zufallszahlen von 1 bis 5 in einigen Spalten.

Schema:

create table friday1 
( id int auto_increment primary key, 
    value1 int not null, 
    value2 int not null 
); 

Insert 3 Reihen:

insert friday1(value1,value2) select floor(rand()*5)+1,floor(rand()*5)+1; 
insert friday1(value1,value2) select floor(rand()*5)+1,floor(rand()*5)+1; 
insert friday1(value1,value2) select floor(rand()*5)+1,floor(rand()*5)+1; 

Stored Proc Helfer:

drop procedure if exists insertMany; 
DELIMITER $$ 
create procedure insertMany 
( howMany int 
) 
BEGIN 
    DECLARE soFar int default 0; 

    set howMany=least(howMany,500); -- max out at 500 regardless of IN parameter (RAND is slow) 
    WHILE soFar<howMany DO 
     insert friday1(value1,value2) select floor(rand()*5)+1,floor(rand()*5)+1; 
     set soFar=soFar+1; 
    END WHILE; 
    select soFar; -- # of times in loop 
END$$ 
DELIMITER ; 

Test:

call insertMany(200); 

Ergebnisse:

select count(*) as theCount, 
least(min(value1),min(value2)) as theMin, 
greatest(max(value1),max(value2)) as theMax 
from friday1; 

+----------+--------+--------+ 
| theCount | theMin | theMax | 
+----------+--------+--------+ 
|  203 |  1 |  5 | 
+----------+--------+--------+ 
Verwandte Themen