sql >> Database >  >> RDS >> PostgreSQL

Postgresql regexp_replace

U kunt een CASE . gebruiken uitdrukking om het jaar te extraheren en te testen en alleen te vervangen als het jaar binnen het gewenste bereik valt:

with test_data (col1) as (
  values ('sdfg 2000'), ('foo 1983'), ('bar 2010'), ('bla 1940')
)
select col1, 
       case 
         when nullif(regexp_replace(col1, '[^0-9]+',''),'')::int between 1990 and 2050 
              then regexp_replace(col1, '\d{4}', '', 'g')
         else col1 
       end as replaced
from test_data;

Resultaten in:

col1      | replaced
----------+---------
sdfg 2000 | sdfg    
foo 1983  | foo 1983
bar 2010  | bar     
bla 1940  | bla 1940

De nullif(..) is nodig voor waarden die geen getallen bevatten. Als je dergelijke waarden niet hebt, kun je deze weglaten.



  1. Grote statistische sets verzamelen met pg_stat_statements?

  2. Hoe SQL Server op een Mac te installeren

  3. MySQL - Bestelquery en toon een willekeurige rij bovenaan

  4. Haal grote klompgegevens op met sqlplus