Di postgresql, bagaimana cara mengganti semua instance string dalam kolom database?
Katakanlah saya ingin mengganti semua contoh cat
dengan dog
, misalnya.
Apa cara terbaik untuk melakukan ini?
Di postgresql, bagaimana cara mengganti semua instance string dalam kolom database?
Katakanlah saya ingin mengganti semua contoh cat
dengan dog
, misalnya.
Apa cara terbaik untuk melakukan ini?
Jawaban:
Anda ingin menggunakan fungsi ganti postgresql :
replace(string text, from text, to text)
misalnya :
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
Namun, perlu diketahui bahwa ini akan menjadi pengganti string-ke-string, sehingga 'kategori' akan menjadi 'dogegori'. fungsi regexp_replace dapat membantu Anda menentukan pola kecocokan yang lebih ketat untuk apa yang ingin Anda ganti.
regexp_replace
Jika Anda membutuhkan pencocokan pengganti yang lebih ketat, regexp_replace
fungsi PostgreSQL dapat dicocokkan dengan menggunakan pola ekspresi reguler POSIX. Itu memiliki sintaks regexp_replace (sumber, pola, penggantian [, bendera]) .
Saya akan menggunakan flag i
dan g
untuk pencocokan case-sensitive dan global, masing-masing. Saya juga akan menggunakan \m
dan \M
untuk mencocokkan awal dan akhir kata, masing-masing.
Biasanya ada beberapa gotcha ketika melakukan penggantian regex. Mari kita lihat betapa mudahnya mengganti kucing dengan anjing .
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
--> Cat bobdog cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
--> dog bobcat cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
--> Cat bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
--> dog bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
--> dog bobcat dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
--> dog bobdog dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
--> dog bobcat dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
--> dog bobcat dog dogs catfish
Bahkan setelah semua itu, setidaknya ada satu kondisi yang tidak terselesaikan. Misalnya, kalimat yang dimulai dengan "Kucing" akan diganti dengan "anjing" kecil yang mematahkan kapitalisasi kalimat.
Lihat dokumen pencocokan pola PostgreSQL saat ini untuk semua detail.
Dengan contoh saya, mungkin opsi teraman adalah:
UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');
Anda dapat menggunakan replace
fungsi ini
UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')
Definisi fungsi adalah sebagai berikut (didapat dari sini ):
replace(string text, from text, to text)
dan mengembalikan teks yang dimodifikasi. Anda juga dapat memeriksa biola sql ini .
Berikut adalah contoh yang menggantikan semua instance dari 1 atau lebih karakter spasi putih dalam kolom dengan garis bawah menggunakan ekspresi reguler -
select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;