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

Cách thay thế nhóm đã bắt bằng biểu thức đã đánh giá (thêm một giá trị số nguyên vào nhóm bắt)

Bạn không thể thực hiện điều này một mình trong regexp vì regexp không hỗ trợ toán học trên các nhóm đã được capture ngay cả khi chúng đều là các ký tự số. Vì vậy, bạn phải lấy nhóm đại diện cho số sàn, làm phép toán và ghép nó lại trong:

SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
       ((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;

Không hiệu quả lắm vì hai lệnh gọi regexp. Một tùy chọn khác là chỉ lấy hai số trong một truy vấn phụ và tập hợp chuỗi trong truy vấn chính:

SELECT format('Building %L - Floor %L', m.num[1], (m.num[2])::int + 10)
FROM (
  SELECT regexp_matches('B12F34', '[0-9]+', 'g') AS num) m;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:truyền chuỗi thành ngày DD / MM / YYYY

  2. Xóa bằng LEFT JOIN

  3. Hàm cửa sổ LAG có thể tham chiếu đến cột mà giá trị đang được tính toán không?

  4. Làm thế nào để bạn làm toán ngày mà bỏ qua năm?

  5. Không thể cài đặt PG gem trên Mac OSX