Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao việc sử dụng ký tự Dấu gạch dưới trong bộ lọc LIKE lại cho tôi tất cả kết quả?

Sửa đổi WHERE của bạn điều kiện như thế này:

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

Đây là một trong những cách mà Oracle hỗ trợ các ký tự thoát. Tại đây, bạn xác định ký tự thoát với escape từ khóa. Để biết chi tiết, hãy xem liên kết này trên Tài liệu Oracle.

'_''%' là các ký tự đại diện trong LIKE câu lệnh hoạt động trong SQL.

_ ký tự tìm kiếm sự hiện diện của (bất kỳ) một ký tự duy nhất. Nếu bạn tìm kiếm theo columnName LIKE '_abc' , nó sẽ cung cấp cho bạn kết quả với các hàng có 'aabc' , 'xabc' , '1abc' , '#abc' nhưng KHÔNG phải 'abc' , 'abcc' , 'xabcd' và như vậy.

'%' ký tự được sử dụng để khớp với số ký tự 0 hoặc nhiều hơn. Điều đó có nghĩa là, nếu bạn tìm kiếm theo columnName LIKE '%abc' , nó sẽ cung cấp cho bạn kết quả khi có 'abc' , 'aabc' , 'xyzabc' v.v., nhưng không có 'xyzabcd' , 'xabcdd' và bất kỳ chuỗi nào khác không kết thúc bằng 'abc' .

Trong trường hợp của bạn, bạn đã tìm kiếm theo '%_%' . Điều này sẽ cung cấp cho tất cả các hàng có cột đó có một hoặc nhiều ký tự, có nghĩa là bất kỳ ký tự nào, làm giá trị của nó. Đây là lý do tại sao bạn nhận được tất cả các hàng mặc dù không có _ trong các giá trị cột của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn được tham số hóa mong đợi tham số không được cung cấp

  2. Thêm gợi ý truy vấn khi gọi Hàm Table-Valued

  3. Node.js và Microsoft SQL Server

  4. SqlParameter không cho phép Tên bảng - các tùy chọn khác mà không có cuộc tấn công tiêm sql?

  5. Sử dụng bộ giá trị trong mệnh đề SQL IN