sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql regexp_replace

Du kan använda en CASE uttryck för att extrahera och testa för året och bara ersätta om året faller inom det intervall du vill ha:

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;

Resultat i:

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

nullif(..) är nödvändigt för värden som inte innehåller några siffror. Om du inte har sådana värderingar kan du utelämna det.



  1. Hur man returnerar rader som har samma kolumnvärden i MySql

  2. Konvertera icke-partitionstabell till partitionerad tabell med ONLINE i Oracle PL/SQL

  3. Hur fixar jag MySQL 8 felkoder:1525 och 1292?

  4. mysql - fulltext index - vad är naturligt språkläge