PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgresql regexp_replace

Bạn có thể sử dụng CASE biểu thức để trích xuất và kiểm tra năm và chỉ thay thế nếu năm đó nằm trong phạm vi bạn muốn:

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;

Kết quả trong:

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

nullif(..) là cần thiết cho các giá trị không chứa bất kỳ số nào. Nếu bạn không có các giá trị như vậy, bạn có thể bỏ qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. regexp_matches cách tốt hơn để loại bỏ việc trả về dấu ngoặc nhọn

  2. Cách xác thực thời gian chồng chéo trong Rails với postgresql

  3. Tính tổng cột thời gian trong PostgreSql

  4. Làm cách nào để dịch PostgreSQL OID bằng python

  5. Làm cách nào để tôi có thể nhập dữ liệu từ ASCII (ISO / IEC 8859-1) vào cơ sở dữ liệu Rails / PGSQL của mình?