Saya mungkin memiliki permintaan yang aneh. Saya tidak menemukan bantuan apa pun melalui Google.

Saya menggunakan alat gui DbVisualizer Pro 10.0.15 yang terhubung ke db PostgreSQL.

Saya perlu membuat file csv dari tabel database. Saya memilih catatan yang saya butuhkan dalam kueri lalu mengekspor hasilnya ke file .csv. Saya bisa melakukannya dengan mudah.

select note from notes;

highlight all results records >> right-click >> select export >> choose csv

Beberapa catatan memiliki tanda kutip tunggal dan/atau ganda dalam kontennya.

Orang yang menerima file ini perlu mengunggah file csv ke sistem lain. Mereka menyatakan bahwa tanda kutip tunggal dan ganda dalam konten ini tidak akan berfungsi dalam unggahan mereka. Saya telah diminta untuk menghindari kutipan ini. Mereka ingin menyimpannya di konten, tetapi membuatnya muncul di bidang dengan karakter pelarian garis miring terbalik, yaitu: it is John's ball akan ditampilkan di file csv sebagai: it is John\'s ball. Hal yang sama untuk kutipan dbl.

Saya mungkin bisa melakukan ini dengan fungsi cari dan ganti di editor teks setelah membuat file csv, tapi saya pikir ini bisa dilakukan melalui sql.

Saya sudah mencoba bermain dengan fungsi regexp_replace().

select regexp_replace(note, '"', '\"') as notes from notes berfungsi pada tanda kutip dbl, tetapi saya tidak beruntung pada tanda kutip tunggal.

Membantu? Apakah ada cara untuk melakukan ini?

1
John Cowan 9 Agustus 2019, 16:21

1 menjawab

Jawaban Terbaik

Anda dapat menghindari tanda kutip ganda dengan melakukan:

postgres=# SELECT REGEXP_REPLACE('this "is" a string', '"', '\"', 'g');
     regexp_replace    
  ----------------------
  this \"is\" a string
  (1 row)

Untuk tanda kutip tunggal, pendekatannya serupa, tetapi Anda harus menghindarinya menggunakan tanda kutip tunggal lainnya. Jadi, alih-alih memiliki sesuatu seperti /', seharusnya ''. Kuerinya adalah:

postgres=# SELECT REGEXP_REPLACE('this ''is'' a string', '''', '\''', 'g');
    regexp_replace    
----------------------
 this \'is\' a string
(1 row)

Perhatikan flag 'g' pada akhirnya, ini memaksanya untuk mengganti semua kemunculan dan bukan hanya yang pertama ditemukan.

Anda juga dapat mengganti tanda kutip tunggal dan ganda dalam satu pernyataan, meskipun keduanya diganti dengan string yang sama (\" dalam kasus ini).

postgres=# SELECT REGEXP_REPLACE('this "is" a ''normal'' string', '["'']', '\"', 'g');
         regexp_replace          
---------------------------------
 this \"is\" a \"normal\" string
(1 row)
0
GRoutar 9 Agustus 2019, 14:01