Truy vấn SQL Trường không KHÔNG chứa $ x


132

Tôi muốn tìm một truy vấn SQL để tìm các hàng trong đó field1 không chứa $ x. Tôi có thể làm cái này như thế nào?


Tôi có thể sử dụng hàm CONTAINS () (sql) để thực hiện kiểm tra tương tự không?
Kate

Câu trả lời:


291

Đây là loại lĩnh vực gì? Toán tử IN không thể được sử dụng với một trường duy nhất, nhưng có nghĩa là được sử dụng trong các truy vấn con hoặc với các danh sách được xác định trước:

-- 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);

Nếu bạn đang tìm kiếm một chuỗi, hãy tìm toán tử THÍCH (nhưng điều này sẽ chậm):

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

Nếu bạn hạn chế nó để chuỗi bạn đang tìm kiếm phải bắt đầu bằng chuỗi đã cho, nó có thể sử dụng các chỉ mục (nếu có một chỉ mục trên trường đó) và nhanh chóng hợp lý:

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

1
xb là gì thư của bạn rất rất khó hiểu. Tôi khuyên bạn nên sử dụng bảng hoặc trường.
Whitecat

Hãy chắc chắn rằng nếu bạn sử dụng truy vấn con cho NOT INrằng không có giá trị nào sẽ là NULL, vì KHÔNG IN và NULL không kết hợp theo cách rõ ràng nếu bạn không quen với logic ba giá trị. Ở đây bạn sẽ sử dụng SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Nếu bạn cũng cần loại trừ các giá trị NULL, bạn cần thực hiện việc này: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%'; (Hãy chắc chắn rằng bạn thoát $ x đúng cách trước để tránh SQL tiêm)

Chỉnh sửa: NOT INthực hiện một cái gì đó hơi khác một chút - câu hỏi của bạn không hoàn toàn rõ ràng vì vậy hãy chọn câu hỏi nào để sử dụng. LIKE 'xxx%'có thể sử dụng một chỉ mục. LIKE '%xxx'hoặc LIKE '%xxx%'không thể.


Điều gì được coi là thoát đúng? Tôi biết rằng với các chuỗi bình thường, bạn chỉ phải thoát một vài thứ, nhưng THÍCH có thêm một số ký tự đặc biệt.
Pieter Bos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.