Máy chủ SQL thoát một dấu gạch dưới


337

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:


522

Tham chiếu T-SQL cho THÍCH :

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'

trời ơi! ... nếu nó vẫn không hoạt động, hãy đảm bảo bạn có cột đúng.
Jens Frandsen

198

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 '^';

42
Để hoàn thành bức tranh: ESCAPEmệ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.
a_horse_with_no_name

2

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


0

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

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.