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

Postgresql regexp_replace

Du kan bruge en CASE udtryk for at udtrække og teste for året og kun erstatte, hvis året falder inden for det område, du ønsker:

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;
 

Resultater i:

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

nullif(..) er nødvendig for værdier, der ikke indeholder nogen tal. Hvis du ikke har sådanne værdier, kan du udelade det.



  1. pgAgent-job mislykkes med godkendelsesfejl

  2. orakel | slette dubletter

  3. PDO bind_param er udefineret metode

  4. Konfigurationssystemet kunne ikke initialiseres