2014/07/10
PostgreSQL
 >  ダミー仮名文字列を作る(復元抽出)
一昨日昨日と同様、テスト用ダミーファイル群を作る過程で考えたが結局使わなかったクエリ。せっかくなので復元抽出の一例としてメモ。実行環境は 2014/04/17 を参照。

↓ ブロック a と b が設定部分。c で使うひらがなを一字一行で準備。そこから復元抽出する要素の位置を e でランダムに指定し、最後で一行ずつに束ねる。
WITH a AS (
-- 配列の第一要素から第二要素までのひらがなを使う
-- 使わない字を第三要素以降に並べる
SELECT '{
あ, を
,ぁ,ぃ,ぅ,ぇ,ぉ,っ,ゃ,ゅ,ょ,ゎ
,が,ぎ,ぐ,げ,ご
,ざ,じ,ず,ぜ,ぞ
,だ,ぢ,づ,で,ど
,ば,び,ぶ,べ,ぼ
,ぱ,ぴ,ぷ,ぺ,ぽ,ゐ,ゑ}' :: text[] ary
), b AS (
-- 何文字のダミー文を、何行つくるか、末尾の句点等
SELECT 30 num1, 5 num2, text '。' eof
), c AS (
-- ひらがな準備
SELECT chr(generate_series(ascii(ary[1]), ascii(ary[2])))
FROM a
EXCEPT ALL
SELECT unnest(ary[3:array_length(ary,1)]) FROM a
), d AS (
SELECT num1, generate_series(1, num2) sub
FROM b
), e AS (
SELECT sub, generate_series(1, num1), floor(random() * x.count)
FROM d, (SELECT count(*) FROM c) x
), f AS (
SELECT *, (SELECT chr FROM c LIMIT 1 OFFSET floor)
FROM e
)
SELECT string_agg(chr, '') || eof string
FROM b, f
GROUP BY sub, eof ;


↑ 実行結果。クエリが複雑な割に、使う意味が感じられなかった。
<< やっぱり壊れた ASUS の Ultrabook
架空の都道府県名を作る(非復元抽… >>