I have a table with a column po_number
of type varchar
in Postgres 8.4. It stores alphanumeric values with some special characters. I want to ignore the characters [/alpha/?/$/encoding/.]
and check if the column contains a number or not. If its a number then it needs to typecast as number or else pass null, as my output field po_number_new
is a number field.
Below is the example:
I tired this statement:
select
(case when regexp_replace(po_number,'[^\w],.-+\?/','') then po_number::numeric
else null
end) as po_number_new from test
But I got an error for explicit cast:
Simply:
SELECT NULLIF(regexp_replace(po_number, '\D','','g'), '')::numeric AS result
FROM tbl;
\D
being the class shorthand for "not a digit".
And you need the 4th parameter 'g'
(for "globally") to replace all occurrences.
Details in the manual.
But why Postgres 8.4? Consider upgrading to a modern version.
Consider pitfalls for outdated versions: