Получите версию zip-столбца, которая представляет собой bigint, если значение zip является числовым, и ноль в противном случае, а затем проверьте это.
Так что, как
select * from address
where case when zip ~ '^[0-9]+$' then cast(zip as bigint) end between 90210 and 90220
Чтобы сделать этот запрос эффективным, вы можете создать индекс для этого выражения:
create index address_zip_idx on address(cast(zip as bigint)) where zip ~ '^[0-9]+$';
-- this query can now use that index
select * from address
where zip ~ '^[0-9]+$' and cast(zip as bigint) between 90210 and 90220;