PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengganti grup yang diambil dengan ekspresi yang dievaluasi (menambahkan nilai integer ke grup yang diambil)

Anda tidak dapat melakukan ini di regexp saja karena regexp tidak mendukung matematika pada grup yang ditangkap meskipun semuanya adalah karakter numerik. Jadi, Anda harus mendapatkan grup yang mewakili nomor lantai, hitung dan sambungkan kembali:

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

Tidak terlalu efisien karena dua panggilan regexp. Pilihan lain adalah dengan hanya mendapatkan dua angka dalam sub-kueri dan merakit string dalam kueri utama:

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. Perlengkapan Django memuat sangat lambat

  2. PostgreSQL - bagaimana cara menentukan apakah suatu transaksi aktif?

  3. Cara Menemukan Nama Batasan di PostgreSQL

  4. Hasilkan serangkaian bulan untuk setiap baris di Oracle

  5. Urutan PostgreSQL yang memastikan ID unik