sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql regexp_replace

Můžete použít CASE výraz, který chcete extrahovat a otestovat pro rok a nahradit jej pouze v případě, že rok spadá do požadovaného rozsahu:

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;

Výsledky v:

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

nullif(..) je nutné pro hodnoty, které neobsahují žádná čísla. Pokud takové hodnoty nemáte, můžete je vynechat.



  1. Povolit podporu SSL pro pgsql

  2. Připojenému dotazu chybí záznamy

  3. Vytvoření vysoce dostupné databáze pro Moodle pomocí replikace MySQL

  4. Co znamená INTERVAL=0 v Oracle Schedular?