3 回答
TA贡献1815条经验 获得超13个赞
稍后添加此答案是因为看起来其他所有人似乎都在将其分解为数组或类似的数组。似乎过多。
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)
我并不是说两个正则表达式是执行此操作的最有效方法,但是rr()是不可变的(对于固定长度),因此您可以对其进行索引。哦-这是9.1
当然,使用plperl,您只需评估一下替换物即可一次性填充/修剪。但是,有了perl,您总是拥有比其他任何方法都更多的选择(TM):-)
- 3 回答
- 0 关注
- 540 浏览
添加回答
举报