Обсуждение: isnumeric - checking if text variable is convertable to numeric
I am writing a pgsql function and I would need to create a condition based on the value of a text variable. I would need to check if text_var is convertable to numeric type and if yes do the conversion, if no do something else. I couldn't find out how to do that. Something like: IF isnumeric(text_var) Then num_var:=Cast (text_var AS numeric); ELSE .... END IF; Thanks for the help. Balázs
On Mon, Apr 24, 2006 at 05:31:46AM -0700, SunWuKung wrote: > I am writing a pgsql function and I would need to create a condition > based on the value of a text variable. I would need to check if > text_var is convertable to numeric type and if yes do the conversion, > if no do something else. I couldn't find out how to do that. I'd use pattern matching: test=# select a, textregexeq(a,'^[[:digit:]]+(\.[[:digit:]]+)?$') as isnumeric from test; a | isnumeric --------+----------- string | f 100. | f 100 | t 100.04 | t .04 | f 0.04 | t 0.04d | f (7 rows) Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > From each according to his ability. To each according to his ability to litigate.
Вложения
I was trying to actually do a cast and trap the error but (beside not having succeeded in doing so) this is a much nicer way. Thanks. Balázs
On 24 Apr 2006 12:49:51 -0700, SunWuKung <Balazs.Klein@t-online.hu> wrote:
> I was trying to actually do a cast and trap the error but (beside not
> having succeeded in doing so) this is a much nicer way.
>
> Thanks.
> Balázs
>
>
in 8.1 you can use exception blocks
BEGIN
statements
EXCEPTION
WHEN condition [ OR condition ... ] THEN
handler_statements
[ WHEN condition [ OR condition ... ] THEN
handler_statements
... ]
END;
http://www.postgresql.org/docs/8.1/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING
--
regards,
Jaime Casanova
"What they (MySQL) lose in usability, they gain back in benchmarks, and that's
all that matters: getting the wrong answer really fast."
Randal L. Schwartz
I tried this but couldn't find out what would be the WHEN condition for
Select Cast('asdf' as numeric)
ERROR: invalid input syntax for type numeric
regards,
Balázs
am 25.04.2006, um 2:01:49 -0700 mailte SunWuKung folgendes:
> I tried this but couldn't find out what would be the WHEN condition for
>
> Select Cast('asdf' as numeric)
> ERROR: invalid input syntax for type numeric
create or replace function check_numeric(varchar) returns bool as $$
declare
i numeric;
begin
i := $1::numeric;
return 't'::bool;
EXCEPTION WHEN invalid_text_representation then
return 'f'::bool;
end;
$$ language plpgsql immutable strict;
HTH, Andreas
--
Andreas Kretschmer (Kontakt: siehe Header)
Heynitz: 035242/47215, D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
=== Schollglas Unternehmensgruppe ===