2009-08-07 36 views
50

Trong T-SQL, bạn sẽ kiểm tra xem chuỗi có chứa chuỗi khác không?Kiểm tra xem chuỗi không chứa một chuỗi khác

Tôi có một số nvarchar có thể là "Cam Táo".

Tôi muốn cập nhật ở đâu, ví dụ: một columm không chứa "Táo".

Làm cách nào để thực hiện điều này?

+1

Vui lòng chính xác hơn với tiêu đề câu hỏi của bạn. '" chứa một chuỗi khác "! =" không chứa chuỗi khác "' – lordcheeto

+0

-1 cho tiêu đề không chính xác. –

+1

Tôi đã thay đổi tiêu đề. Tốt hơn không bao giờ :) – Dofs

Trả lời

75
WHERE NOT (someColumn LIKE '%Apples%') 
+1

Tại sao tôi không nghĩ về điều đó, tôi đã đi cho một cái gì đó cao cấp hơn nhiều :) – Dofs

+0

Sử dụng dấu nháy đơn thay vì tăng gấp đôi: '% Táo%'. Tôi đã cố gắng chỉnh sửa bài đăng nhưng SO yêu cầu chỉnh sửa phải có sáu ký tự trở lên. – DeveloperDan

+0

@DeveloperDan - cảm ơn. đã sửa. –

24

Hoặc cách khác, bạn có thể sử dụng này:

WHERE CHARINDEX(N'Apples', someColumn) = 0 

Không chắc cái nào thực hiện tốt hơn - bạn gotta thử nghiệm nó! :-)

Marc

UPDATE: việc thực hiện có vẻ là khá nhiều ngang bằng với các giải pháp khác (WHERE someColumn NOT LIKE '% Táo%') - vì vậy nó thực sự chỉ là vấn đề sở thích cá nhân của bạn .

+0

Hiệu suất không phải là một vấn đề lớn trong trường hợp của tôi. – Dofs

+2

+1: Nếu văn bản được khớp là động hơn là một chuỗi tĩnh như 'Táo', thì phương pháp này vượt trội hơn, vì bạn không cần phải lo lắng về các ký tự đại diện như '%', '_' sẽ được kết hợp bởi toán tử LIKE. – Joe

+0

@ Joe Nếu bạn muốn trở nên hiểu biết về nó, thì điều này sẽ không hoạt động trong mọi trường hợp. CHARINDEX không phân biệt chữ hoa chữ thường. vì vậy nếu bạn đang tìm kiếm một Apple trong một lĩnh vực táo bạn sẽ nhận được rất nhiều toàn bộ. Tôi biết nó đã được một vài năm kể từ khi điều này đã được đăng, nhưng vẫn còn. Cả hai câu trả lời đều hợp lệ tùy thuộc vào chủ đề và không có câu trả lời nào bao gồm tất cả các căn cứ. a -1 từ bạn cho câu trả lời được chấp nhận chỉ có vẻ một chút ... là pernickety đúng từ? – DDuffy

10

Sử dụng điều này như WHERE điều kiện của bạn

WHERE CHARINDEX('Apples', column) = 0 
7

Những câu trả lời bạn đã giả định văn bản tĩnh để so sánh với. Nếu bạn muốn so sánh với một cột khác (giả sử bạn đang tham gia hai bảng và muốn tìm những cột có một cột từ một bảng), bạn có thể làm điều này

WHERE NOT (someColumn LIKE '%' || someOtherColumn || '%') 
+1

+1, bạn cũng có thể sử dụng cú pháp NOT LIKE. – Dunc

+2

Sẽ không hoạt động nếu someOtherColumn chứa ký tự đại diện như '%', '_'. – Joe

Các vấn đề liên quan