On 21 September 2011 11:18, Szymon Guz <mabewlun@xxxxxxxxx> wrote:
On 21 September 2011 10:51, Oliver Kohll - Mailing Lists <oliver.lists@xxxxxxxxxx> wrote:
Hi,
I understand random() is a volatile function and runs multiple times for multiple rows returned by a SELECT, however is there a way of getting it to run multiple times *within* another function call and in the same row. i.e. something like
select regexp_replace('+1 555 555 555', E'\\d', trunc(random() * 9 + 1)::text,'g');
regexp_replace
----------------
+1 111 111 111
(1 row)
As you can see, it returns the same digit each time. I've tried wrapping a select around the trunc too.
Regards
Oliver Kohll
www.gtwm.co.uk / www.agilebase.co.uk
Short answer is: yes. More information you can find here http://simononsoftware.com/problem-with-random-in-postgresql-subselect/regardsSzymon
with splitted as (
select regexp_split_to_table('+1 555 555 555', '') as x
)
select
array_to_string(
array_agg(
regexp_replace(x, E'\\d', trunc(random()*9 + 1)::text, 'g')
),
'')
from splitted;
In my query the regexp is called for each char from the input string.
regards
Szymon