2009-12-16 20 views
12

Tôi có truy vấn SQL SELECT * FROM table WHERE column LIKE '%pdd%'.Tuyên bố MySQL LIKE để tìm chuỗi con tại bất kỳ vị trí nào ngoại trừ sự bắt đầu của chuỗi

Vấn đề là tôi cần phải nhận tất cả các kết quả ngoại trừ các kết quả bắt đầu bằng "pdd", theo đó tôi muốn tìm mọi thứ có "pdd" không phải lúc đầu. Làm thế nào nó có thể được thực hiện?

Tôi cần khớp "pdd" khi nó không ở đầu cột.

Trả lời

22

tôi giả sử bạn có nghĩa là tất cả các hàng phù hợp với "PDD" ngoại trừ những nơi "PDD" là lúc đầu.

SELECT * FROM table WHERE column LIKE '_%pdd%'. 

Các "_" ký tự đại diện trong LIKE vị từ có nghĩa là "một trong bất kỳ nhân vật," tương đương với "." trong biểu thức thông thường.

+0

Xin lỗi nhưng không. điều này sẽ KHÔNG làm việc trong các trường hợp như 'pdd hello pdd' vì p đầu tiên khớp với' _' và phần còn lại của chuỗi (bao gồm cả một '" pdd "') khác sẽ khớp với '% pdd%'. OP không bao giờ đề cập rằng chuỗi "pdd" sẽ luôn luôn là duy nhất trong chuỗi, do đó, nhiều ocurrences của nó, nơi một trong số họ là lúc đầu sẽ làm cho giải pháp này không hoạt động. OP, xem xét không chấp nhận câu trả lời này (vì nó không chính xác) và chấp nhận câu trả lời bằng quosoo hoặc Marc. – DiegoDD

+0

@DiegoDD, Đó là một điểm tốt, tôi bỏ qua khả năng của mô hình xảy ra hai lần. Đây là một câu hỏi cũ, tôi sẽ được nghe từ OP về vấn đề này. Nhưng kể từ khi ông chấp nhận nó, tôi sẽ giả sử nó làm việc cho các trường hợp ông cần. –

+0

Tôi đồng ý về việc OP của tôi thấy hữu ích và không có vấn đề gì, nhưng vì đây là trang cộng đồng, bạn có thể chỉnh sửa câu trả lời để tuyên bố rằng nó không hoạt động trong trường hợp này, vì những người khác có thể tìm câu trả lời (giống như tôi đã làm), và là một câu hỏi cũ không làm cho nó ít hữu ích hoặc hợp lệ. Cảm ơn vi đa trả lơi. – DiegoDD

0

Hãy thử:

SELECT * FROM table WHERE column NOT LIKE 'pdd%' 
+1

OP dường như muốn khớp 'pdd', ngoại trừ khi bắt đầu cột - điều này sẽ không làm điều đó ... –

+0

đọc để hiểu –

5

Nếu tôi hiểu yêu cầu của bạn một cách chính xác những gì bạn cần là:

SELECT * FROM table WHERE column LIKE '%pdd_%' and column NOT LIKE 'pdd_%' 
4
SELECT * FROM table WHERE column LIKE '%pdd%' AND column NOT LIKE 'pdd%' 

Bạn có thể tối ưu hóa các truy vấn tùy thuộc vào cách thường xuyên những việc nầy xảy trong bảng.

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