2009-12-08 8 views
139

Có thể kết hợp LIKEIN trong truy vấn SQL Server không?Kết hợp "LIKE" và "IN" cho SQL Server

Vì vậy, đó là truy vấn này

SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%') 

Finds bất kỳ của các trận đấu càng tốt:

Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness 

vv ...

+0

Tôi làm cách nào để thêm câu trả lời ngay bây giờ? – Cloud

+0

@Cloud Bạn có thể trả lời [câu hỏi được liên kết] (https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql) nếu bạn có đầu vào mới. Cái này trùng lặp. –

Trả lời

156

hiệu quả, báo cáo kết quả TRÊN tạo ra một chuỗi câu lệnh OR ... do đó

SELECT * FROM table WHERE column IN (1, 2, 3) 

là một cách hiệu quả

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 

Và buồn thay, đó là con đường bạn sẽ phải mang theo của bạn NHỮNG phát biểu LIKE

SELECT * FROM table 
WHERE column LIKE 'Text%' OR column LIKE 'Hello%' OR column LIKE 'That%' 
+0

là cú pháp duy nhất này? – shaffooo

+0

Chỉ cần lưu ý: truy vấn cuối cùng cũng hoạt động trong oracle (11g) – Abrar

+0

Tôi đang tìm kiếm ví dụ regex bên trong tương tự nhưng điều này sẽ làm ngay bây giờ! –

5

Bạn cần nhiều khoản NHƯ nối với nhau bằng OR.

SELECT * FROM table WHERE 
column LIKE 'Text%' OR 
column LIKE 'Link%' OR 
column LIKE 'Hello%' OR 
column LIKE '%World%' OR 
+5

NOOOOOOO. Điều gì nếu hàng chục giá trị có thể? thật khủng khiếp ... – Faruz

+0

Đó là cuộc sống? Câu hỏi đặt ra là liệu MS SQL có hỗ trợ cú pháp đó hay không. Nó không. Thật khó để suy đoán về một giải pháp tốt hơn mà không thực sự biết vấn đề ở bàn tay. Tìm kiếm toàn văn có thể là một lựa chọn như Mitch đã chỉ ra. Nó cũng có thể được mong muốn để viết một thủ tục lưu trữ (ví dụ như C#, trong đó có khả năng xử lý văn bản tiên tiến hơn). –

1

Không, MSSQL không cho phép truy vấn như vậy. Bạn nên sử dụng col LIKE '...' OR col LIKE '...', vv

4

Không, bạn sẽ phải sử dụng OR kết hợp LIKE báo cáo của bạn:

SELECT 
    * 
FROM 
    table 
WHERE 
    column LIKE 'Text%' OR 
    column LIKE 'Link%' OR 
    column LIKE 'Hello%' OR 
    column LIKE '%World%' 

Bạn đã nhìn Full-Text Search?

85

Một tùy chọn khác sẽ là sử dụng một cái gì đó như thế này

SELECT * 
FROM table t INNER JOIN 
     (
      SELECT 'Text%' Col 
      UNION SELECT 'Link%' 
      UNION SELECT 'Hello%' 
      UNION SELECT '%World%' 
     ) List ON t.COLUMN LIKE List.Col 
+0

@astander: Đó là những gì tôi nghĩ đến. – shahkalpesh

+8

Đây là câu trả lời gần nhất với tinh thần của câu hỏi, vì vậy +1 –

+0

Có câu trả lời là tôi đang tìm kiếm Cảm ơn bạn –

123

Tôi biết điều này là cũ nhưng tôi đi một loại dung dịch làm việc

SELECT Tbla.* FROM Tbla 
INNER JOIN Tblb ON 
Tblb.col1 Like '%'+Tbla.Col2+'%' 

Bạn có thể mở rộng nó hơn nữa với mệnh đề where vv bạn Tôi chỉ nguyên nhân trả lời đây là những gì đang tìm kiếm và phải tìm ra cách để thực hiện nó

+8

Giải pháp tuyệt vời, điều này nên được đánh dấu là câu trả lời. –

+6

@ lloydz1 đây không phải là câu hỏi ban đầu mặc dù có một cột các giá trị được tạo ra khi đang bay. Bạn đang làm điều này trên hai bảng. – Riz

+0

tuyệt vời! thx: :) –