Không bao giờ là tốt khi sử dụng các giá trị được phân tách bằng dấu phẩy để lưu trữ trong cơ sở dữ liệu nếu khả thi, hãy thử tạo các bảng riêng biệt để lưu trữ chúng vì rất có thể đây là 1:n
mối quan hệ.
Nếu điều này không khả thi thì bạn có thể thực hiện theo những cách sau đây, Nếu số lượng giá trị cần khớp của bạn không đổi, thì bạn có thể muốn thực hiện chuỗi Like
câu lệnh cùng với OR/AND
tùy thuộc vào yêu cầu của bạn.
Ví dụ:
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Tuy nhiên, truy vấn ở trên sẽ có khả năng bắt tất cả các giá trị chứa 21
vì vậy ngay cả khi các cột có giá trị như 1210
, 210
cũng sẽ được trả lại. Để khắc phục điều này, bạn có thể thực hiện thủ thuật sau đây cản trở hiệu suất vì nó sử dụng các hàm trong where
và điều đó đi ngược lại việc tạo Có thể tìm kiếm
truy vấn. Nhưng đây rồi,
--Declare valueSearch variable first to value to match for you can do this for multiple values using multiple variables.
Declare @valueSearch = '21'
-- Then do the matching in where clause
WHERE
(',' + RTRIM(Media) + ',') LIKE '%,' + @valueSearch + ',%'
Nếu số lượng giá trị cần khớp sẽ thay đổi thì bạn có thể muốn xem xét Chỉ mục FullText
và bạn cũng nên nghĩ về điều tương tự. Và nếu bạn quyết định chọn điều này sau Fulltext Index
bạn có thể làm như bên dưới để đạt được những gì bạn muốn,
Ví dụ:
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')