PostgreSQL

PostgreSQL 乱数作成

お手軽に英数字を使ったランダム文字列作成

MD5ハッシュは16進表現となるので、出力されるのは0-9、a-fの範囲内でのランダム文字です

select substr(md5(random()::text || now()::text),1,32) as random_string
;

random() ランダムな浮動小数点数を生成(明示的なキャストは不要だけど今回はつけてます)
now()::text システム時間を文字列化
md5() 上記連結文字列をMD5でハッシュ
substr() で先頭から32文字を抽出

myposdb=# select substr(md5(random()::text || now()::text),1,32) as random_string
myposdb-# ;
          random_string
----------------------------------
 2a6f0f7b42b3e39569908eca9227c1fd
(1 行)


myposdb=#
お手軽に英数字を使ったランダム文字列作成
select array_to_string(array(select chr((48 + round(random() * 74))::integer) 
from generate_series(1,32)), '') as random_string;
myposdb=# select array_to_string(array(select chr((48 + round(random() * 74))::integer) 
from generate_series(1,32)), '') as random_string;
          random_string
----------------------------------
 thnRk]ux=x8Fmd_BluW4dvWUakyM]=Q<
(1 行)


myposdb=#
少し解説します
以下SQLでは、asciiコード表の48~122番の文字をランダムに出力しています。
select chr((48 + round(random() * 74))::integer);

また、from generate_series(1,32)とする事で、32件の結果セットを返却しています。

array_to_string()の第2パラメータを''としている事で、区切り文字無しで文字列化しています。
スポンサーリンク
タイトルとURLをコピーしました