3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
稍后添加此答案是因?yàn)榭雌饋?lái)其他所有人似乎都在將其分解為數(shù)組或類似的數(shù)組。似乎過(guò)多。
CREATE FUNCTION rr(text,int) RETURNS text AS $$
SELECT regexp_replace(
regexp_replace($1, '[0-9]+', repeat('0',$2) || '\&', 'g'),
'[0-9]*([0-9]{' || $2 || '})',
'\1',
'g'
)
$$ LANGUAGE sql;
SELECT t,rr(t,9) FROM mixed ORDER BY t;
t | rr
--------------+-----------------------------
AAA02free | AAA000000002free
AAA10bob | AAA000000010bob
AAA2bbb03boo | AAA000000002bbb000000003boo
AAA2bbb3baa | AAA000000002bbb000000003baa
AAA2fred | AAA000000002fred
(5 rows)
(reverse-i-search)`OD': SELECT crypt('richpass','$2$08$aJ9ko0uKa^C1krIbdValZ.dUH8D0R0dj8mqte0Xw2FjImP5B86ugC');
richardh=>
richardh=> SELECT t,rr(t,9) FROM mixed ORDER BY rr(t,9);
t | rr
--------------+-----------------------------
AAA2bbb3baa | AAA000000002bbb000000003baa
AAA2bbb03boo | AAA000000002bbb000000003boo
AAA2fred | AAA000000002fred
AAA02free | AAA000000002free
AAA10bob | AAA000000010bob
(5 rows)
我并不是說(shuō)兩個(gè)正則表達(dá)式是執(zhí)行此操作的最有效方法,但是rr()是不可變的(對(duì)于固定長(zhǎng)度),因此您可以對(duì)其進(jìn)行索引。哦-這是9.1
當(dāng)然,使用plperl,您只需評(píng)估一下替換物即可一次性填充/修剪。但是,有了perl,您總是擁有比其他任何方法都更多的選擇(TM):-)
- 3 回答
- 0 關(guān)注
- 566 瀏覽
添加回答
舉報(bào)