宣言
RANDSTR(N, gen)
説明
この関数は、指定された長さのランダム文字列を生成します。文字列内の文字には A-Z、a-z、0-9 が含まれます。
Nは生成されるランダム文字列の長さです:N < 0の場合、NULLを返します。N = 0の場合、空の文字列を返します。N > 0かつN <= max_allowed_packetの場合、長さ N のランダム文字列を返します。N > max_allowed_packetの場合、NULLを返します。ここで、max_allowed_packetはシステム変数で、デフォルト値は 16777216 です。
genは分布関数であり、次の値を取ります:- 定数の場合、
RANDSTR()を呼び出すたびに同じランダム文字列が生成されます。 - 整数値を返すランダム関数、例えば
RANDOM()など。 - 均等分布、Zipf分布、ガウス分布などの分布関数。
- 定数の場合、
ランダム文字列の生成アルゴリズム:LCGアルゴリズムを使用して N 個のランダム値を生成し、それに基づいて N 個の文字を選択してランダム文字列を構成します。そのため、N が非常に大きい場合は多くのCPUパワーを消費します。例えば、以下のように長さ 300M のランダム文字列を生成するのに 1.7 秒かかりました。
obclient> SELECT LENGTH(RANDSTR(300000000, 1)) FROM DUAL;; +------------------------------+ | LENGTH(RANDSTR(300000000,1)) | +------------------------------+ | 300000000 | +------------------------------+ 1 row in set (1.73 sec)
例
以下の例は、RANDSTR()関数を使用して長さが10のランダム文字列を生成する方法です。
obclient> SELECT RANDSTR(10, RANDOM()) FROM TABLE(GENERATOR(7));
+-----------------------+
| randstr(10, random()) |
+-----------------------+
| TGfdBAZ1BP |
| VvMbD2bChR |
| VNSB6MpgQw |
| 3QWYQYQVJ4 |
| CpyE58jM0o |
| vBvsJBGGmX |
| rg3Pkde0UJ |
+-----------------------+
7 rows in set
RANDSTR()関数は、Nパラメータの値を変更することで、異なる長さの文字列を生成できます。以下の例を参照してください。
obclient> SELECT RANDSTR(5, 40) FROM DUAL;
+----------------+
| RANDSTR(5, 40) |
+----------------+
| UU3g0 |
+----------------+
1 row in set
obclient> SELECT RANDSTR(1, 40) FROM DUAL;
+----------------+
| RANDSTR(1, 40) |
+----------------+
| U |
+----------------+
1 row in set
obclient> SELECT RANDSTR(0, 40) FROM DUAL;
+----------------+
| RANDSTR(0, 40) |
+----------------+
| |
+----------------+
1 row in set
obclient> SELECT RANDSTR(-1, 40) FROM DUAL;
+-----------------+
| RANDSTR(-1, 40) |
+-----------------+
| NULL |
+-----------------+
1 row in set
genが定数の場合、RANDSTR()関数を繰り返し実行しても、同じランダム文字列が生成されます。以下の例を参照してください。
obclient> SELECT RANDSTR(10, 1442) FROM TABLE(GENERATOR(7));
+-------------------+
| RANDSTR(10, 1442) |
+-------------------+
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
+-------------------+
7 rows in set
obclient> SELECT RANDSTR(10, 1442) FROM TABLE(GENERATOR(7));
+-------------------+
| RANDSTR(10, 1442) |
+-------------------+
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
| 4dTm5bOtGc |
+-------------------+
7 rows in set