SQL Query Dimana Field TIDAK Mengandung $ x

132

Saya ingin menemukan kueri SQL untuk menemukan baris di mana field1 tidak mengandung $ x. Bagaimana saya bisa melakukan ini?

zuk1
sumber
Bisakah saya menggunakan fungsi CONTAINS () (sql) untuk melakukan pemeriksaan yang sama?
Kate

Jawaban:

291

Bidang apa ini? Operator IN tidak dapat digunakan dengan bidang tunggal, tetapi dimaksudkan untuk digunakan dalam subqueries atau dengan daftar yang telah ditentukan:

-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

Jika Anda mencari sebuah string, pilih operator LIKE (tetapi ini akan lambat):

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

Jika Anda membatasi sehingga string yang Anda cari harus dimulai dengan string yang diberikan, itu dapat menggunakan indeks (jika ada indeks pada bidang itu) dan cukup cepat:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
Vegard Larsen
sumber
1
apa itu xb? surat-suratmu sangat membingungkan. Saya sarankan menggunakan tabel atau bidang.
Whitecat
Pastikan bahwa jika Anda menggunakan subquery untuk NOT INitu tidak ada nilai yang akan NULL, karena NOT IN dan NULL tidak digabungkan dengan cara yang jelas jika Anda tidak terbiasa dengan logika tiga nilai. Di sini Anda akan menggunakan SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Jika Anda juga perlu mengecualikan nilai NULL, Anda harus melakukan ini:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
Bacon Bits
17

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Pastikan Anda melarikan diri $ x dengan benar sebelumnya untuk menghindari injeksi SQL)

Sunting: NOT INmelakukan sesuatu yang sedikit berbeda - pertanyaan Anda tidak sepenuhnya jelas jadi pilih yang mana yang akan digunakan. LIKE 'xxx%'dapat menggunakan indeks. LIKE '%xxx'atau LIKE '%xxx%'tidak bisa.

Greg
sumber
Apa yang dianggap lolos dengan benar? Saya tahu bahwa dengan string normal Anda hanya perlu melarikan diri dari beberapa hal, tetapi LIKE memiliki beberapa karakter khusus.
Pieter Bos