Cột trong một bảng cơ sở dữ liệu SQL Server của tôi chứa đường dẫn (không phải đường dẫn tệp, chỉ đường dẫn thư mục).Tìm thư mục con của đường dẫn tệp từ bảng đường dẫn tệp bằng chức năng "LIKE" của SQL Server
Tôi hiện đang có truy vấn trả về tất cả các thư mục con của đường dẫn tệp đã cho, sử dụng hàm LIKE
;
WHERE Path LIKE @FilePath + '%'
Lưu ý rằng có vấn đề với phương pháp này là ký tự thoát tệp được sử dụng bởi tất cả các ký tự đường dẫn tệp hợp lệ. Tôi sẽ sử dụng đúng ESCAPE trong truy vấn đã hoàn thành.
Dù sao, hãy quay lại câu hỏi của tôi. Tôi muốn có thể sửa đổi truy vấn để truy vấn chỉ trực tiếp các thư mục con của đường dẫn được chỉ định. Điều này không dễ dàng như chỉ việc đặt dấu gạch chéo ở cuối chuỗi, vì rõ ràng là% wildcard gobbles mọi thứ khi nó phân tích phần bên phải của chuỗi.
Tôi đang xem xét sử dụng trình tự thoát [^], có thể thực hiện tìm kiếm không bao gồm ký tự \ nhưng tôi không may mắn với điều đó. Tôi đã thử điều này;
WHERE Path LIKE @FilePath + '[^\]'
Nhưng nó không tạo ra kết quả mong muốn, vì vậy tôi thậm chí không chắc mình có sử dụng đúng cách hay không.
Bằng cách áp dụng chức năng cho cột, bạn thực hiện truy vấn không hiệu quả (http://en.wikipedia.org/wiki/Sargable). Mặt khác, 'LIKE' chống lại một mẫu bắt đầu bằng một chuỗi cố định (trái ngược với các ký tự mặt nạ và các biểu thức như'% ',' _' và '[...]') vẫn có thể cho phép một chỉ mục thích hợp được dùng. –
Trong trường hợp của tôi là Andriy, cột là NVARCHAR (MAX), vì vậy nó không được lập chỉ mục. Điểm tốt mặc dù. @Charl Lamprecht - cảm ơn câu trả lời của bạn, việc sử dụng LEFT tiết kiệm cho tôi những rắc rối của việc phải đối phó với các ký tự thoát của các nhà điều hành LIKE - cổ vũ! –