sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan caster jeg en streng til heltal og har 0 i tilfælde af fejl i castet med PostgreSQL?

Jeg kæmpede bare selv med et lignende problem, men ville ikke have overheadet til en funktion. Jeg kom op med følgende forespørgsel:

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

Postgres genvejer dets betingelser, så du bør ikke få nogen ikke-heltal, der rammer din ::integer cast. Det håndterer også NULL-værdier (de matcher ikke regexp).

Hvis du vil have nuller i stedet for ikke at vælge, så burde en CASE-sætning virke:

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


  1. SQL Call Stored Procedure for hver række uden brug af en markør

  2. Fix Msg 8117 "Operand data type varchar er ugyldig for sum operator" i SQL Server

  3. Brug af JShell i Java 9 i NetBeans 9.0, del 3

  4. Sådan kommenterer du i SQL