Saya perlu pilih yang akan mengembalikan hasil seperti ini:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
Dan saya membutuhkan semua hasil, yaitu ini termasuk string dengan 'word2 word3 word1' atau 'word1 word3 word2' atau kombinasi lainnya dari ketiganya.
Semua kata harus ada dalam hasil.
word3 word2 word1
.Perhatikan bahwa jika Anda menggunakan
LIKE
untuk menentukan apakah string adalah substring dari string lain, Anda harus melarikan diri dari karakter yang cocok dengan pola dalam string pencarian Anda.Jika dialek SQL Anda mendukung
CHARINDEX
, lebih mudah untuk menggunakannya:Juga, harap diingat bahwa ini dan metode dalam jawaban yang diterima hanya mencakup pencocokan substring daripada pencocokan kata. Jadi, misalnya, senar
'word1word2word3'
masih cocok.sumber
InStr()
sebaliknyaCHARINDEX
Fungsi
Pertanyaan
sumber
Alih-alih
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
, tambahkan Dan di antara kata-kata seperti:untuk detail, lihat di sini https://msdn.microsoft.com/en-us/library/ms187787.aspx
MEMPERBARUI
Untuk memilih frasa, gunakan tanda kutip ganda seperti:
ps Anda harus terlebih dahulu mengaktifkan Pencarian Teks Lengkap di atas meja sebelum menggunakan berisi kata kunci. untuk lebih jelasnya, lihat di sini https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search
sumber
Diubah
OR
menjadiAND
berdasarkan edit ke pertanyaan.sumber
Jika Anda menggunakan Oracle Database maka Anda dapat mencapai ini menggunakan mengandung query. Berisi querys lebih cepat daripada query seperti.
Jika Anda membutuhkan semua kata
Jika Anda membutuhkan kata-kata
Berisi indeks kebutuhan bertipe CONTEXT pada kolom Anda.
sumber
Jika Anda hanya ingin menemukan kecocokan.
SQL Server:
Untuk mendapatkan kecocokan yang tepat. Contoh
(';a;ab;ac;',';b;')
tidak akan mendapatkan kecocokan.sumber
coba gunakan "pencarian tesarus" dalam indeks teks lengkap di MS SQL Server. Ini jauh lebih baik daripada menggunakan "%" dalam pencarian jika Anda memiliki jutaan catatan. tesarus memiliki sejumlah kecil konsumsi memori dibandingkan yang lain. coba cari fungsi ini :)
sumber
Cara terbaik adalah membuat indeks teks lengkap pada kolom dalam tabel dan menggunakan isi daripada LIKE
sumber
mengapa tidak menggunakan "in" saja?
sumber
Salah satu cara termudah untuk mencapai apa yang disebutkan dalam pertanyaan adalah dengan menggunakan WADAH dengan DEKAT atau '~'. Misalnya, pertanyaan berikut akan memberi kita semua kolom yang secara khusus mencakup kata1, kata2 dan kata3.
Selain itu, CONTAINSTABLE mengembalikan peringkat untuk setiap dokumen berdasarkan kedekatan "word1", "word2" dan "word3". Misalnya, jika sebuah dokumen berisi kalimat, "Kata1 adalah kata2 dan kata3," peringkatnya akan tinggi karena ketentuannya lebih dekat satu sama lain daripada di dokumen lain.
Satu hal lain yang ingin saya tambahkan adalah bahwa kita juga dapat menggunakan proximity_term untuk menemukan kolom di mana kata-kata berada di dalam jarak tertentu di antara mereka di dalam frase kolom.
sumber
Ini idealnya harus dilakukan dengan bantuan pencarian teks lengkap sql server jika menggunakan. Namun, jika Anda tidak bisa mengerjakannya dengan DB karena suatu alasan, berikut ini adalah solusi intensif kinerja: -
sumber
Ini akan menampilkan semua catatan yang
column1
berisi nilai parsialword
.sumber
sumber
atau
sumber