2012-09-04 14 views
48

Tôi nghĩ rằng đó là CONTAINS, nhưng điều đó không hiệu quả đối với tôi.Làm cách nào để biết biến VARCHAR có chứa chuỗi con không?

tôi đang tìm cách để làm điều này:

IF CONTAINS(@stringVar, 'thisstring') 
    ... 

tôi phải chạy một select này hay cách khác, tùy thuộc vào việc biến có chứa một chuỗi và tôi không thể tìm ra cách để có được nó để làm việc. Tất cả các ví dụ tôi thấy đang sử dụng các cột trong vùng chứa.

Xin cảm ơn trước.

Trả lời

62

SQL cách tiêu chuẩn là sử dụng như:

where @stringVar like '%thisstring%' 

Đó là trong một tuyên bố truy vấn. Bạn cũng có thể làm điều này trong TSQL:

if @stringVar like '%thisstring%' 
+1

... mà làm cho tôi buồn. Tôi đã thử ngày hôm đó và nó không hoạt động. Tôi phải gõ một cái gì đó sai vì nó chỉ làm việc. Tôi đang phấn đấu để làm điều gì đó muộn vào thứ Sáu trước một ngày cuối tuần 3 ngày. Tôi có thể đã gõ toàn bộ câu lệnh ngược lại cho tất cả những gì tôi biết. Cảm ơn! – Yatrix

+3

@Yatrix. . . bạn cũng có thể sử dụng charindex ('thisstring', @stringVar), nếu như thế dường như không hoạt động. –

+0

@Asad. . . Tất nhiên điều này sẽ làm việc. Ký tự đại diện '%' khớp với 0 hoặc nhiều ký tự. –

6

CONTAINS là dành cho một lĩnh vực được lập chỉ mục Toàn văn - nếu không, sau đó sử dụng LIKE

22

Thay vì LIKE (mà không làm việc như bình luận khác đã gợi ý), bạn có thể cách khác sử dụng CHARINDEX:

declare @full varchar(100) = 'abcdefg' 
declare @find varchar(100) = 'cde' 
if (charindex(@find, @full) > 0) 
    print 'exists' 
5
IF CHARINDEX('TextToSearch',@TextWhereISearch, 0) > 0 => TEXT EXISTS 

    IF PATINDEX('TextToSearch', @TextWhereISearch) > 0 => TEXT EXISTS 

    Additionally we can also use LIKE but I usually don't use LIKE.