The following bug has been logged on the website: Bug reference: 8471 Logged by: Dan Rickner Email address: dnrick...@taylor.edu PostgreSQL version: 9.2.4 Operating system: CentOS Description:
Our ERP stores student GPA values as a text string. I am trying to select only valid gpa values (a number between 0 and 4.0). I have a function called numeric that returns a bool if the value can be converted to a number. When I run my query I get errors about values that should not be considered in my outer where statement. The inner where is supposed to filter out the bad data values: -- function to return if a character string can be converted to a number create or replace function isnumeric(varchar) returns boolean as $$ declare x numeric; begin x = $1::numeric; return true; exception when others then return false; end $$ language plpgsql immutable; -- test table create table tbl ( id serial not null, gpa varchar(6) null ); -- insert bad data insert into tbl (gpa) values ('A'), ('2.0'), ('12.5'), ('3.45'), (''), ('-'), ('-2.3'), ('-5'); select * from ( -- this subquery returrns only numeric values select a.id, trunc(a.gpa::numeric, 2) as gpa from ( select id, gpa, isnumeric(gpa) as num from tbl ) as a where a.num = true ) as b -- filter the numeric values to the 4.0 range where b.gpa between 0.0 and 4.0 -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs