Kategorien:

Datengenerierungsfunktionen

RANDOM

Jeder Aufruf gibt eine pseudozufällige 64-Bit-Ganzzahl zurück.

Syntax

RANDOM([seed])

Argumente

Optional:

Startwert

Der Startwert ist eine ganze Zahl. Bei unterschiedlichen Startwerten erzeugt RANDOM unterschiedliche Ausgabewerte.

Nutzungshinweise

  • Das optionale Startwert-Argument muss eine Ganzzahlkonstante sein. Wenn für Startwert kein Wert angegeben ist, wird ein Plattform-spezifischer zufälliger Startwert ausgewählt.

  • Wenn in einer Anweisung RANDOM mehrfach mit dem gleichen Startwert aufgerufen wird (z. B. SELECT RANDOM(42), RANDOM(42);), gibt RANDOM während der Ausführung dieser Anweisung für jeden Aufruf den gleichen Wert zurück.

    Siehe die Beispiele unten.

  • Wenn in einer Anweisung RANDOM (entweder mit oder ohne Startwert) aufgerufen wird, gibt es keine Garantie, dass RANDOM bei jeder Ausführung dieser Anweisung den gleichen Wertesatz generiert.

    Siehe den Hinweis im Abschnitt Beispiele unter diesem Thema.

  • Zufällige Werte sind keine eindeutigen Werte. Obwohl Duplikate bei einer geringen Anzahl von Aufrufen selten sind, steigt die Wahrscheinlichkeit von Duplikaten mit steigender Anzahl von Aufrufen. Wenn Sie eindeutige Werte benötigen, müssen Sie anstelle des Aufrufs von RANDOM eine Sequenz (SEQ1 / SEQ2 / SEQ4 / SEQ8) verwenden. Wählen Sie eine Sequenz mit genügend Bits aus, damit die Wahrscheinlichkeit, dass die Sequenz von vorn beginnt, gering bleibt.

  • Da die Ausgabe eine endliche Ganzzahl ist und die Werte eher von einem Algorithmus als von einem Zufallsgenerator generiert werden, schlägt die Funktion schließlich um und beginnt, Sequenzen von Werten zu wiederholen. Die „Periode“ (Anzahl der Aufrufe vor dem Umschlagen) ist jedoch sehr groß: 2^19937 - 1.

  • Die Ausgabe ist nur pseudozufällig. Sie kann vorhergesagt werden, wenn genügend Informationen vorliegen (einschließlich Algorithmus und Startwert).

  • RANDOM implementiert einen 64-Bit-Mersenne-Twister-Algorithmus, der als MT19937-64 bekannt ist.

  • Die Generierung von Pseudozufallszahlen ist rechnerisch aufwendig. Eine große Anzahl von Aufrufen für diese Funktion kann erhebliche Ressourcen in Anspruch nehmen.

Beispiele

In den folgenden Beispielen wird die Verwendung der Funktion RANDOM() gezeigt. Die in der Ausgabe unten angezeigten Werte können sich von den Werten unterscheiden, die zurückgegeben werden, wenn Sie diese Beispiele selbst ausführen.

Bemerkung

Gehen Sie nicht davon aus, dass RANDOM bei jeder Ausführung die gleichen Werte zurückgibt.

Wird dasselbe Beispiel von verschiedenen Mitarbeiter-Threads ausgeführt, können in jedem Thread unterschiedliche Werte für RANDOM generiert werden.

Im folgende Beispiel wird RANDOM ohne Startwert aufgerufen:

SELECT random() FROM table(generator(rowCount => 3));

+----------------------+
|             RANDOM() |
|----------------------|
|  -962378740685764490 |
|  2115408279841266588 |
| -3473099493125344079 |
+----------------------+

Im folgende Beispiel wird RANDOM mit einem Startwert aufgerufen:

SELECT random(4711) FROM table(generator(rowCount => 3));
+----------------------+
|         RANDOM(4711) |
|----------------------|
| -3581185414942383166 |
|  1570543588041465562 |
| -6684111782596764647 |
+----------------------+

Wie in den Nutzungshinweisen erläutert, gibt RANDOM bei mehrmaligem Aufruf von RANDOM in derselben Anweisung und bei Übergabe desselben Startwerts an jeden Aufruf den gleichen Wert für alle Aufrufe in dieser Anweisungsausführung zurück.

Beispielsweise generiert die Ausführung der folgenden Anweisung für beide Aufrufe von RANDOM den gleichen Wert:

SELECT random(4711), random(4711);
+----------------------+----------------------+
|         RANDOM(4711) |         RANDOM(4711) |
|----------------------+----------------------|
| -3581185414942383166 | -3581185414942383166 |
+----------------------+----------------------+

Wenn die Anweisung für mehrere Zeilen ausgeführt wird, gibt RANDOM für jede Zeile einen anderen Wert zurück. In einer Anweisung, die mehrere Tabellenzeilen generiert, gibt RANDOM für jede Zeile einen anderen Wert zurück:

SELECT random(4711), random(4711) FROM table(generator(rowCount => 3));
+----------------------+----------------------+
|         RANDOM(4711) |         RANDOM(4711) |
|----------------------+----------------------|
| -3581185414942383166 | -3581185414942383166 |
|  1570543588041465562 |  1570543588041465562 |
| -6684111782596764647 | -6684111782596764647 |
+----------------------+----------------------+

Wie im obigen Beispiel gezeigt, generieren die Aufrufe in der ersten Zeile einen anderen Wert als die Aufrufe in der zweiten und dritten Zeile.

Beachten Sie, dass dies nur dann auftritt, wenn Sie RANDOM den gleichen Startwert übergeben. Wenn Sie keinen Startwert übergeben, gibt RANDOM für jeden Aufruf in der Anweisung einen anderen Wert zurück.

SELECT random(), random() FROM table(generator(rowCount => 3));

+----------------------+----------------------+
|             RANDOM() |             RANDOM() |
|----------------------+----------------------|
|  3150854865719208303 | -5331309978450480587 |
| -8117961043441270292 |   738998101727879972 |
|  6683692108700370630 |  7526520486590420231 |
+----------------------+----------------------+