Tìm kiếm hàng với các ký tự đặc biệt trong SQL Server
Trong khi xử lý sự cố lập trình ngày hôm nay, tôi nhận thấy rằng bạn không thể sử dụng tìm kiếm THÍCH cho các cột chuỗi chứa các ký tự đặc biệt như% hoặc _ mà không sử dụng cú pháp đặc biệt. Tìm ra vấn đề chỉ mất vài phút, nhưng việc ghi nhớ cú pháp luôn dễ dàng hơn nếu bạn viết về nó.
Vì vậy, có, bài viết này chỉ dành cho lợi ích của tôi. Hy vọng nó cũng sẽ giúp được người khác.
Giả sử bạn muốn tìm bất kỳ trường nào có chứa văn bản Hồi 100%, vì vậy bạn kết hợp truy vấn này:
CHỌN * TỪ tablename WHERE tên trường THÍCH '% 100 %%'
Thay vì những gì bạn muốn, bạn sẽ nhận được tất cả các hàng có chứa 100% 100 cũng như các hàng có chứa 100%.
Vấn đề ở đây là SQL Server sử dụng dấu phần trăm, dấu gạch dưới và dấu ngoặc vuông làm ký tự đặc biệt. Bạn chỉ đơn giản là không thể sử dụng chúng như một ký tự đơn giản trong truy vấn THÍCH mà không thoát khỏi chúng.
Khung thoát hiểm vuông
Bạn có thể bao quanh% hoặc _ bằng dấu ngoặc vuông để cho SQL Server biết rằng ký tự bên trong là ký tự thông thường.
CHỌN * TỪ tablename WHERE tên trường THÍCH '% 100 [%]%'
Cú pháp ESCAPE T-SQL
Ngoài ra, bạn có thể nối toán tử ESCAPE vào truy vấn của mình và thêm ký tự \ trước giá trị bạn muốn thoát.
CHỌN * TỪ tablename WHERE tên trường THÍCH '% 100 \ %%' ESCAPE '\'
Phần ESCAPE '\' của truy vấn yêu cầu công cụ SQL diễn giải ký tự sau \ dưới dạng ký tự bằng chữ thay vì ký tự đại diện.
Cá nhân tôi thấy phương pháp thứ hai dễ đối phó hơn và bạn cũng có thể sử dụng nó để thoát khỏi dấu ngoặc vuông.