T-SQL và mệnh đề WHERE LIKE% Tham số%


84

Tôi đang 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 cố gắng sử dụng một tham số cho văn bản. Ví dụ, điều này hoạt động:

SELECT Employee WHERE LastName LIKE '%ning%'

Điều này sẽ trả về người dùng Flenning, Manning, Ningle, v.v. Nhưng câu lệnh này sẽ không:

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

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

Câu trả lời:


158

Nó phải là:

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

Thay vì:

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

1
cảm ơn vì mẹo trước đó cho câu hỏi. Nhưng không phải vậy. Dù sao trong nhiệm vụ của một câu trả lời hiệu suất cao - điều này có hữu ích hay không? :)
bonCodigo

1
@bonCodigo Tôi thực sự không biết, hiệu suất và tối ưu hóa không phải là lĩnh vực của tôi. Hơn nữa, các chức năng này dành riêng cho nhà cung cấp, 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.
Mahmoud Gamal

3
Điều này không hiệu quả với tôi. % Cần phải có trong phần addParameter. Xem James Curran trả lời ở đây stackoverflow.com/questions/251276/...
bendecko

2
xem câu trả lời của tôi (hiện tại bên dưới). ký tự đại diện-biểu tượng là MỘT PHẦN của biểu thức TÌM KIẾM, không phải là một phần của truy vấn sql. Nó được nhập bởi USER (hoặc, nếu tìm kiếm theo ký tự đại diện được xác định trước, sẽ được thêm vào đầu vào biểu thức tìm kiếm của người dùng). Nếu bạn nối nó thông qua trùng lặp chuỗi ở cấp cơ sở dữ liệu, bạn sẽ nhận được một chuỗi truy vấn không thể sử dụng được
swe

16

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

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

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

8

bạn có thể thử cái này, đã sử dụng CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
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.