PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql regexp_replace

Możesz użyć CASE wyrażenie do wyodrębnienia i przetestowania dla roku i zastąpienia tylko wtedy, gdy rok mieści się w żądanym zakresie:

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;

Wyniki w:

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

nullif(..) jest konieczne dla wartości, które nie zawierają liczb. Jeśli nie masz takich wartości, możesz je pominąć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. -bash:pg_dump:polecenie nie zostało znalezione

  2. String_agg dla wielu kolumn

  3. czy klucz podstawowy jest automatycznie indeksowany w postgresql?

  4. Django emuluje zachowanie wyzwalacza bazy danych podczas zbiorczego wstawiania/aktualizowania/usuwania

  5. Chcę zwrócić nową kolumnę przy użyciu Rekursywnie w SQL?