Thread: maybe incorrect regexp_replace behavior in v8.3.4 ?
Hi:
bi_hsx_a0_latest=# select regexp_replace('xxx','^xxx$','abc');
regexp_replace
----------------
abc
(1 row)
expected behavior because there's a match
bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$','abc');
regexp_replace
----------------
xxx
(1 row)
expected because there is no match (the 'y' in 'xxxy')
bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null);
regexp_replace
----------------
(1 row)
But why did it return null in this case? I would think no match would leave it 'xxx'.
Thanks in Advance for any help and/or explanation.
On 16/05/12 14:54, Gauthier, Dave wrote: > bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null); > regexp_replace > ---------------- > > (1 row) > But why did it return null in this case? I would think no match would leave it 'xxx'. If a function is defined as "strict" then any null parameters automatically result in a null result. And indeed, this: SELECT * FROM pg_proc WHERE proname LIKE 'regexp_r%'; shows pro_isstrict is set to true, as it is for most other function.s -- Richard Huxton Archonet Ltd
"Gauthier, Dave" <dave.gauthier@intel.com> writes: > bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null); > regexp_replace > ---------------- > > (1 row) > But why did it return null in this case? regexp_replace is strict, so it never even gets called when there's a null input. regards, tom lane