sql >> Database >  >> RDS >> PostgreSQL

Hoe cast ik een string naar integer en heb ik 0 in het geval van een fout in de cast met PostgreSQL?

Ik worstelde zelf met een soortgelijk probleem, maar wilde geen overheadkosten van een functie. Ik kwam met de volgende vraag:

SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgres verkort zijn conditionals, dus je zou geen niet-gehele getallen moeten krijgen die je ::integer-cast raken. Het behandelt ook NULL-waarden (ze komen niet overeen met de regexp).

Als je nullen wilt in plaats van niet te selecteren, dan zou een CASE-statement moeten werken:

SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;


  1. Converteer django RawQuerySet naar Queryset

  2. Unieke beperking voor meerdere kolommen

  3. Een storing in de communicatieverbinding oplossen met JDBC en MySQL

  4. Hoe u alle gebeurtenissen van een tekenreeks kunt vervangen door een andere tekenreeks in SQL Server - REPLACE()