Làm thế nào để tôi thoát khỏi nhân vật gạch dưới?
Tôi đang viết một cái gì đó giống như mệnh đề where sau đây và muốn có thể tìm thấy các mục thực tế với _d ở cuối.
Where Username Like '%_d'
Làm thế nào để tôi thoát khỏi nhân vật gạch dưới?
Tôi đang viết một cái gì đó giống như mệnh đề where sau đây và muốn có thể tìm thấy các mục thực tế với _d ở cuối.
Where Username Like '%_d'
Câu trả lời:
Bạn có thể sử dụng mẫu ký tự đại diện khớp với các ký tự như các ký tự bằng chữ. Để sử dụng ký tự đại diện làm ký tự chữ, hãy đặt ký tự đại diện trong ngoặc. Bảng sau đây cho thấy một số ví dụ về việc sử dụng từ khóa THÍCH và các ký tự đại diện [].
Đối với trường hợp của bạn:
... LIKE '%[_]d'
Rõ ràng giải pháp @Lasse là đúng, nhưng có một cách khác để giải quyết vấn đề của bạn: Toán tử T-SQL LIKE
định nghĩa mệnh đề ESCAPE tùy chọn , cho phép bạn khai báo một ký tự sẽ thoát ký tự tiếp theo vào mẫu.
Đối với trường hợp của bạn, các mệnh đề WHERE sau là tương đương:
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
ESCAPE
mệnh đề là một phần của tiêu chuẩn SQL và sẽ hoạt động trên mọi DBMS, không chỉ SQL Server.
Những giải pháp này hoàn toàn có ý nghĩa. Thật không may, không làm việc cho tôi như mong đợi. Thay vì cố gắng gây rắc rối với nó, tôi đã thực hiện một công việc xung quanh:
select * from information_schema.columns
where replace(table_name,'_','!') not like '%!%'
order by table_name
Điều này làm việc cho tôi, chỉ cần sử dụng thoát
'%\_%'
Không ai trong số này làm việc cho tôi trong SSIS v18.0, vì vậy tôi sẽ làm một cái gì đó như thế này:
WHERE CHARINDEX('_', thingyoursearching) < 1
.. ở mọi nơi tôi đang cố gắng bỏ qua các chuỗi có dấu gạch dưới trong đó. Nếu bạn muốn tìm những thứ có dấu gạch dưới, chỉ cần lật nó xung quanh:
WHERE CHARINDEX('_', thingyoursearching) > 0