Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
OT: Zufälligen SQL-Wert generieren?
#5
welches DBMS?

leider sind die Random-Funktionen der DBMSs relativ schlecht. Rainer hatte mit dem SQL-Server da auch nicht so gute Erfahrungen gemacht. Beim alten MySQL hat das auch ziemlich gesponnen. Beim 4er sollte es angeblich besser sein.

Grundsätzlich hat ja SQL keine Random-Funktion. Das sind alles proprietäre Erweiterungen des DBMS.

Ihr verwendet vermutlich Oracle, oder? Oder a SAP-DBMS? Kenn mich da net so aus.

Wenn's irgendwie geht, mach's eher im Programmcode und nicht auf der DB - ist jedenfalls einfacher.

Ausserdem ist "laufenden, zufälligen SQL-Wert" net grad sehr verständlich. Sorry, dass ich jetzt obergscheit klinge, aber entweder er ist fortlaufend - also ein Zähler, oder er ist zufällig. Wenn er eindeutig sein soll, dann kann er nicht zufällig sein. Und was meinst du mit "SQL-Wert". Das ganze soll in der DB-Ablaufen? Stored Procedure oder SELECT-Statement, oder?

sonst sowas wie:
<pre>
initialisiere Zufallszahlengenerator;
str = "";
for(i = 0; i < 4 i++)
{
j = rnd(36); // erzeugt Zufallszahlen von 0 bis 35
if(j < 10)
str = str + chr(j + 48);
else
str = str + chr(j - 10 + 65)
}
</pre>
muss man natürlich an die jeweilege Prog-Sprache anpassen.

was auch gehen würde: Zufallszahl generieren (möglichst großer Bereich, dann einen hash davon berechnen (md5-Funktion z.B.) und davon dann die ersten 4 Ziffern verwenden:

in PHP z.B.:
str = substr(md5(rand()), 0, 4);

Kommt halt auf die Eigenschaften an, die der Code haben soll.

Wenn du das ganze in einem Select/Insert/Update brauchst, dann geht vermutlich keine Schleife - einfach 4 mal hintereinander denselben Code. Eventuell ohne If und dafür vorher einen String definieren:
z.B. für SQL-Server (ohne es getestet zu haben.)

<pre>
DECLARE strChars VARCHAR(255)
SET strChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
SELECT SUBSTRING(strChars, ROUND(36 * RAND()), 1) +
SUBSTRING(strChars, ROUND(36 * RAND()), 1) +
SUBSTRING(strChars, ROUND(36 * RAND()), 1) +
SUBSTRING(strChars, ROUND(36 * RAND()), 1)
</pre>

geht natürlich auch in am Insert oder Update.
Achtung: Randbedingungen beim SUBSTRING und ROUND hab ich nicht gecheckt.


Nachtrag: Ich glaub das mit den Problemen bei Zufallszahlen und den DBMS ist bei deinem Fall kein Problem. Bei uns war das jeweils das Problem, dass wir zufällig Zeilen aus einer Tabelle auswählen wollten. D.h. man muss beim ORDER BY eine Zufallszahl verwenden. Und da haben/hatten die DBMS Probleme. Sprich die Zeilen die da rausgekommen sind, waren meist überhaupt nicht zufällig. Hatte das Problem z.B. bei der Fußzeile hier im Forum: Wollte, dass unter "Besucht auch unsere Sponsoren:" unsere größten Sponsoren zufällig sortiert erscheinen. Gewichtet nach dem was sie zahlen.

Aufpassen musst natürlich bei den Initialisierungswerten der Zufallszahlengeneratoren. Ist aber auch immer ein Implementierungsdetail, also net unbedingt allgemeingültig.
Zitieren


Nachrichten in diesem Thema
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 15:48
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 19:24
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 20:14
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 20:24
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 20:30
OT: Zufälligen SQL-Wert generieren? - von noox - 2004-03-12, 20:31

Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Ist das Telefon den Kauf wert? eminemhzx 0 59 2012-09-17, 10:01
Letzter Beitrag: eminemhzx
  Was íst ein Gary Fisher Tassajara '99 noch Wert? Groovy 3 3,081 2007-05-05, 15:19
Letzter Beitrag: Dr. Dollar
  Was ist euch das Leben wert ??? Haiflyer 74 12,202 2004-09-18, 18:21
Letzter Beitrag: Nikee
  OT: was isser noch wert ? Haiflyer 8 954 2003-10-26, 18:41
Letzter Beitrag: Haiflyer
  Wieviel sind mir Hochwasseropfer wert ? freakazoid 15 1,749 2002-08-12, 21:03
Letzter Beitrag: freakazoid

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste