Saya memiliki tabel dengan dua bidang (negara dan kode ISO):
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. 'AF'(without quotes)
Di beberapa baris, bidang kedua memiliki spasi putih di awal dan / atau akhir, yang memengaruhi kueri.
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. ' AF' (without quotes but with that space in front)
Apakah ada cara (dalam SQL) untuk pergi melalui tabel dan menemukan / mengganti spasi putih di field2?
Jawaban:
Anda sedang mencari TRIM .
sumber
Jawaban umum yang saya buat dari jawaban Anda dan dari tautan lain dan itu berhasil untuk saya dan saya menulisnya dalam komentar adalah:
dll.
Karena trim () tidak menghapus semua spasi putih, jadi lebih baik untuk mengganti semua spasi putih yang Anda inginkan dan daripada memotongnya.
Semoga saya bisa membantu Anda membagikan jawaban saya :)
sumber
Harap mengerti kasus penggunaan sebelum menggunakan solusi ini:
trim tidak berfungsi saat melakukan kueri pemilihan
Ini bekerja
Meskipun ini tidak
sumber
TRIM()
berfungsi dengan baik untuk saya dalam sebuahSELECT
pernyataan, saya benar-benar ingin tahu mengapa jawaban ini mendapat begitu banyak upvotes. Apakah Anda menggunakan mysql? Versi apa?SELECT CONCAT('"', TRIM(" hello world "), '"') AS `trimmed value` FROM DUAL
memberikan output yang diinginkan"hello world"
. Sementara varian ganti berbahaya menghapus ruang sebagai pemisah kata:SELECT CONCAT('"', REPLACE(" hello world ", ' ', '')) AS `replaced value` FROM DUAL
memberikan hasil yang tidak diinginkan"helloworld"
Supaya jelas, TRIM secara default hanya menghapus spasi (tidak semua spasi putih). Inilah dokumennya: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
sumber
Tampaknya tidak ada jawaban saat ini yang benar-benar akan menghapus 100% spasi putih dari awal dan akhir string.
Seperti disebutkan dalam posting lain, defaultnya
TRIM
hanya menghapus spasi - bukan tab, formfeed, dll. Kombinasi dariTRIM
menentukan karakter spasi putih lainnya dapat memberikan peningkatan terbatas, misTRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt)))))
. Tetapi masalah dengan pendekatan ini hanya satu karakter yang dapat ditentukan untuk yang khususTRIM
dan karakter tersebut hanya dihapus dari awal dan akhir. Jadi jika string yang dipangkas adalah sesuatu seperti\t \t \t \t
(yaitu spasi alternatif dan karakter tab), lebih banyakTRIM
s akan diperlukan - dan dalam kasus umum ini dapat berlangsung tanpa batas.Untuk solusi yang ringan, harus dimungkinkan untuk menulis Fungsi Didefinisikan Pengguna (UDF) sederhana untuk melakukan pekerjaan dengan mengulangi karakter pada awal dan akhir string. Tetapi saya tidak akan melakukan itu ... karena saya telah menulis sebuah pengganti ekspresi reguler yang lebih berat yang juga dapat melakukan pekerjaan - dan mungkin berguna karena alasan lain, seperti dijelaskan dalam posting blog ini .
Demo
Rextester demo online . Secara khusus, baris terakhir menunjukkan metode lain gagal tetapi metode ekspresi reguler berhasil.
Fungsi :
Pemakaian:
sumber
Pernyataan ini akan menghapus dan memperbarui konten bidang database Anda
Untuk menghapus spasi putih di sisi kiri nilai bidang
SETELAH tabel SET field1 = LTRIM (field1);
ex. SET UPDATE anggota firstName = LTRIM (firstName);
Untuk menghapus spasi putih di sisi kanan nilai bidang
Tabel UPDATE SETfield1 = RTRIM (field1);
ex. SET UPDATE anggota firstName = RTRIM (firstName);
sumber
Saya perlu memangkas nilai-nilai dalam kolom kunci utama yang memiliki nama depan dan belakang, jadi saya tidak ingin memotong semua ruang putih karena akan menghapus ruang antara nama depan dan belakang, yang harus saya pertahankan. Apa yang berhasil untuk saya adalah ...
atau
atau
Perhatikan bahwa instance pertama FIELD dalam tanda kutip tunggal tetapi yang kedua tidak dalam tanda kutip sama sekali. Saya harus melakukannya dengan cara ini atau itu memberi saya kesalahan sintaks mengatakan itu adalah kunci primer duplikat ketika saya memiliki keduanya dalam tanda kutip.
sumber
Jika Anda perlu menggunakan trim dalam kueri pemilihan, Anda juga dapat menggunakan ekspresi reguler
kembalikan baris dengan bidang seperti 'kueri-string'
sumber
Anda dapat menggunakan ltrim atau rtrim untuk membersihkan spasi putih di sebelah kanan atau kiri atau string.
sumber
Anda dapat menggunakan sql berikut, UPDATE
TABLE
SETColumn
= ganti (Kolom, '', '')sumber
Saya tahu ini sudah diterima, tetapi untuk orang-orang seperti saya yang mencari "hapus SEMUA ruang putih" (tidak hanya pada awal dan akhir dari string):
EDIT 2019/6/20: Ya, itu tidak baik. Fungsi mengembalikan bagian dari string sejak "ketika ruang karakter muncul untuk pertama kalinya". Jadi, saya rasa mengatakan ini menghapus spasi putih terkemuka dan tertinggal dan mengembalikan kata pertama:
sumber