2013-01-09 33 views
42

Tôi đã cố gắng viết một câu lệnh sử dụng mệnh đề WHERE LIKE '% text%', nhưng tôi không nhận được kết quả khi tôi cố gắng sử dụng tham số cho văn bản. Ví dụ, công trình này:T-SQL và mệnh đề% Parameter% WHERE LIKE% Parameter%

SELECT Employee WHERE LastName LIKE '%ning%' 

này sẽ quay trở lại sử dụng Flenning, Manning, Ningle, vv Tuy nhiên, tuyên bố này sẽ không:

DECLARE @LastName varchar(max) 
SET @LastName = 'ning' 
SELECT Employee WHERE LastName LIKE '%@LastName%' 

Không có kết quả được tìm thấy. Bất kỳ đề xuất? Cảm ơn trước.

Trả lời

93

Nó nên là:

... 
WHERE LastName LIKE '%' + @LastName + '%'; 

Thay vì:

... 
WHERE LastName LIKE '%@LastName%' 

Hoặc này:

... 
WHERE LastName LIKE Concat('%',@LastName,'%') 
+1

nhờ cho mẹo trước đó về câu hỏi. Nhưng nó không phải là mặc dù. Dù sao [trong nhiệm vụ của một câu trả lời có hiệu suất cao - điều này có hữu ích hay không?] (Http://stackoverflow.com/a/14243580/1389394) :) – bonCodigo

+1

@bonCodigo Tôi không biết thực sự, hiệu suất và tối ưu hóa không khu vực của tôi. Hơn nữa, các chức năng này là nhà cung cấp cụ thể, trong trường hợp của bạn nó phụ thuộc vào cách Oracle RDBMS đánh giá chúng, và tôi không biết Oracle. Lấy làm tiếc. –

+2

Điều này không hiệu quả đối với tôi. % Cần phải nằm trong phần addParameter. Xem James Curran trả lời ở đây http://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql – bendecko

14

Câu trả lời đúng là, rằng, vì '%' -Đăng là một phần của biểu thức tìm kiếm của bạn, nó phải là một phần của VALUE của bạn, vì vậy bất cứ nơi nào bạn SET @LastName (có thể là từ một ngôn ngữ lập trình hoặc từ TSQL), bạn nên đặt nó vào '%' + [userinput] + '%'

hoặc, trong ví dụ của bạn:

DECLARE @LastName varchar(max) 
SET @LastName = 'ning' 
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%' 
+1

Cảm ơn bạn Cảm ơn bạn Cảm ơn bạn !! –

1

bạn có thể thử thế này, sử dụng CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%') 
Các vấn đề liên quan