私はpostgresqlで実行しています。単純な列挙型からランダムな値を選択したいと思います。私は道をオンラインで見つけることができませんでした。SQL列挙型からランダム値を選択
これは、タイプの例である:
create type letter as enum('A','B','C','D');
は今、私はちょうどランダム文字のいずれかを選択します。感謝! ありがとう!
私はpostgresqlで実行しています。単純な列挙型からランダムな値を選択したいと思います。私は道をオンラインで見つけることができませんでした。SQL列挙型からランダム値を選択
これは、タイプの例である:
create type letter as enum('A','B','C','D');
は今、私はちょうどランダム文字のいずれかを選択します。感謝! ありがとう!
このついて行くのいくつかの方法があります。私はあなたがおそらくせずに、単一の選択でこれを行うことができます想像
SELECT myletter FROM (SELECT unnest(enum_range(NULL::letter)) as myletter) sub ORDER BY random() LIMIT 1;
:私は、ただランダムにレコードの1つをつかむ、自分の行にそれらを分割する列挙値をダンプするenum_range
を使用し、unnest
ういくつかの異なる機能を使用して入れ子にしていますが、これは論理的には、あなたがしていたことを解読しなければならない次の人にとっては明らかです。ここのコメントで@pozsから
PostgresはFROM
句で直接unnest()
を貼り付けるサポートしているため、明らかに副選択は不必要である:多くは魔法のように動作
SELECT myletter FROM unnest(enum_range(NULL::letter)) myletter ORDER BY random() LIMIT 1;
私はそれのためpg_typeシステムカタログとはpg_enumに参加したい:
select e.*
from pg_type t
join pg_enum e on e.enumtypid = t.oid where typname='letter'
order by random()
limit 1;
例:
t=# select enumlabel from pg_type t join pg_enum e on e.enumtypid = t.oid where typname='letter' order by random() limit 1;
enumlabel
-----------
A
(1 row)
t=# select enumlabel from pg_type t join pg_enum e on e.enumtypid = t.oid where typname='letter' order by random() limit 1;
enumlabel
-----------
D
(1 row)
t=# select enumlabel from pg_type t join pg_enum e on e.enumtypid = t.oid where typname='letter' order by random() limit 1;
enumlabel
-----------
B
(1 row)
感謝。 _especially 'select e.enumlabel'は文字だけを返します。私はこのコードがどのように動作しているかを知る必要があります。 – LaprimoSiesta
サブ選択は不要ですが、 'FROM unnest(...)myletter'はPostgreSQLで完全に有効です。 – pozs
ああ、とてもいいです。私はポストグレーブでしか扱うことができません。私はいつもそれがきれいな構文であることを喜んでおり、このような短いショートカットです。 – JNevill
ああ、これはまた、 '文字'タイプとして返されます。計画どおりに動作します。 – LaprimoSiesta