Kiểm tra xem một chuỗi có chứa một chuỗi con trong SQL Server 2005 không, bằng cách sử dụng một quy trình được lưu trữ


245

Tôi có một chuỗi , @mainString = 'CATCH ME IF YOU CAN'. Tôi muốn kiểm tra xem từ MEbên trong @mainString.

Làm cách nào để kiểm tra xem một chuỗi có một chuỗi con cụ thể trong SQL không?

Câu trả lời:


395

CHARINDEX () tìm kiếm một chuỗi con trong một chuỗi lớn hơn và trả về vị trí của kết quả khớp hoặc 0 nếu không tìm thấy kết quả khớp

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

Chỉnh sửa hoặc từ câu trả lời của daniels, nếu bạn muốn tìm một từ (và không phải là thành phần phụ của từ), cuộc gọi CHARINDEX của bạn sẽ như sau:

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

(Thêm các lệnh gọi REPLACE đệ quy () cho bất kỳ dấu câu nào khác có thể xảy ra


2
Okie tôi đã sử dụng PATINDEX. Cảm ơn bạn!
NLV

1
s / đệ quy / lồng nhau / - "đệ quy" sẽ là nếu REPLACEđược gọi là chính nó; "lồng nhau" là khi kết quả của một lệnh gọi hàm ngay lập tức được chuyển sang một hàm khác.
Vụ kiện của Quỹ Monica

2
Liệu 'ME' có phân biệt chữ hoa chữ thường trong SQL hay bạn cũng sẽ phải thực hiện một câu lệnh if cho 'Tôi' và 'tôi'?
a.powell

5
@ a.powell - tùy thuộc vào sự đối chiếu có liên quan. Bạn luôn có thể buộc nó trong bài kiểm tra này nếu bạn cần nó bằng cách này hay cách khác. Ví dụ so sánh select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home'). (Trong các bộ sưu tập, CSviết tắt của Case Sensitive và tôi chắc chắn bạn có thể giải quyết được CI).
Damien_The_Unbeliever

2
@VincePanuccio - Xử lý chuỗi của T-SQL nổi tiếng là yếu. Sức mạnh của SQL là trong các hoạt động dựa trên thiết lập. Trong trường hợp này (muốn thực hiện xử lý chuỗi và một cái gì đó trong đó biểu thức chính quy sẽ là một giải pháp rõ ràng), đó là trường hợp họ chọn công cụ sai cho công việc.
Damien_The_Unbeliever

120

Bạn chỉ có thể sử dụng ký tự đại diện trong vị ngữ (sau IF, WHERE hoặc ON):

@mainstring LIKE '%' + @substring + '%'

hoặc trong trường hợp cụ thể này

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(Đặt khoảng trắng trong chuỗi trích dẫn nếu bạn đang tìm toàn bộ từ hoặc bỏ chúng đi nếu ME có thể là một phần của từ lớn hơn).


3
Nếu bạn đang tìm từ khớp (ví dụ thứ hai của bạn), bạn cần phải a) thêm khoảng trắng trước và sau @mainString (để bạn có thể ghép từ đầu tiên hoặc từ cuối cùng) và b) xóa dấu câu
Damien_The_Unbeliever 24/03

2
Điều này tốt hơn CHARINDEX () đối với tôi vì trong trường hợp cụ thể của tôi, tôi không thể thực thi hàm CHARINDEX () do quyền hạn chế.
James T Snell

1
(Chỉ cần đừng quên tiền tố tất cả các hằng chuỗi của bạn Nnếu cột của bạn là một nvarchar, nếu không bạn sẽ nhận được chuyển đổi theo hàng)
Richard Szalay
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.