CREATE OR REPLACE FUNCTION is_valid_number(s) AS CASE WHEN s IS NULL THEN false WHEN try_cast(s AS DOUBLE) IS NOT NULL THEN true ELSE false END; # Illustration select s, is_valid_number(s) from (select unnest([ '123.0', '123.', '-123', '3.14159', '1.2.3', 'abc', 'A440', ' 12 ', '0A', '+1E10', '1E-10' ]) as s);