PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql regexp_replace

Можете да използвате CASE израз за извличане и тестване за годината и замяна само ако годината попада в диапазона, който искате:

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;

Резултати в:

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

nullif(..) е необходимо за стойности, които не съдържат никакви числа. Ако нямате такива стойности, можете да ги оставите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявката на SQLAlchemy показва грешка Не може да присъедини таблица/избираеми „работни потоци“ към себе си

  2. Какво е името на ограничението по подразбиране в PostgreSQL?

  3. Позиция на колоната в индекса

  4. Как да работите с PostgreSQL бази данни

  5. Създаване на потребител с криптирана парола в PostgreSQL