2010-05-21 25 views
7

Làm cách nào để thoát khỏi ký tự ngoặc kép bên trong hàm MS SQL 'contains'?Làm thế nào để bạn thoát khỏi dấu ngoặc kép bên trong một hàm fulltext SQL 'contains'?

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34" AND wide') 

Thường chứa dấu ngoặc kép để bao quanh cụm từ chính xác để khớp, nhưng tôi muốn tìm kiếm ký tự trích dẫn thực tế kép. Tôi đã cố gắng thoát nó với \, `, và thậm chí cả một trích dẫn kép, nhưng không ai trong số đó đã làm việc.

P.S. Tôi nhận ra một ví dụ đơn giản như thế này cũng có thể được thực hiện bằng cách sử dụng câu lệnh LIKE, nhưng tôi cần phải sử dụng chức năng tìm kiếm toàn văn. Truy vấn tôi đã cung cấp ở đây đã được đơn giản hóa từ truy vấn thực tế của tôi cho các mục đích ví dụ.

+0

Câu hỏi liên quan mà OP đã thấy: http://stackoverflow.com/questions/387198/escape-double-quotes-in-sql-2005-2008 – bernie

Trả lời

5

Từ documentation:

Punctuation được bỏ qua. Do đó, CONTAINS(testing, "computer failure") khớp với hàng có giá trị, "Máy tính của tôi ở đâu? Không tìm thấy nó sẽ đắt tiền".

Kể từ FULLTEXT thậm chí không chỉ số thời gian cài đặt, bạn sẽ cần để tinh lọc kết quả của bạn sử dụng LIKE:

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34 AND wide') 
     AND decision LIKE '%34"%' 

này sẽ bảo vệ các lợi ích của toàn văn.

2

Câu trả lời ở trên không hoạt động trong SQL Server 2008 nếu chuỗi của bạn là một số có một chữ số.

này hoạt động:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '10') 
     AND decision LIKE '%10"%' 

này không hoạt động:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '6') 
     AND decision LIKE '%6"%'' 

EDIT: Giải thích về lý do tại sao một chữ số duy nhất có thể không được lập chỉ mục.

Nếu danh sách từ dừng hệ thống (hoặc từ tiếng ồn) đang được sử dụng, nó chứa mỗi chữ số như từ bị bỏ qua. Bạn có thể thay đổi nội dung của danh sách Stop Word hoặc bạn có thể tắt hoàn toàn Stop Words.

ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF; 

Khi một trong những thay đổi này được thực hiện, văn bản bị ảnh hưởng phải được lập lại trước khi các chữ số đơn có thể tìm kiếm được. Sau khi reindexing nó thực sự sẽ có thể tìm kiếm '6'.

+0

Tôi đã cập nhật giải thích để bao gồm lý do tại sao một chữ số sẽ hoặc sẽ không được lập chỉ mục. – RLF

Các vấn đề liên quan