2010-08-12 48 views
9

Tôi đang làm việc tại một trang web tìm kiếm sử dụng Sql server 2008 express edition.tìm kiếm sql trên các trường có chứa dấu phụ

Tôi có 'Sách' bảng có trường có tên 'Tiêu đề' trong đó có các tiêu đề chứa ký tự tiếng Rumani (latin).

Vâng, nếu người dùng chèn một từ như: 'casa' trong lĩnh vực tìm kiếm và tôi có một danh hiệu trong db như: 'test Casa test' i muốn thể hiện cuốn sách đó nhưng:

select * from books where title like '%casa%' 

sẽ không tìm thấy ...

Bạn có biết bất kỳ chức năng nào loại bỏ dấu phụ khi thực hiện lựa chọn không?

Tôi biết rằng tôi có thể giải quyết sự cố với tiện ích tìm kiếm toàn văn bản của máy chủ sql nhưng tôi muốn thực hiện theo cách đơn giản hơn.

Trả lời

15
select * from books where title COLLATE Latin1_General_CI_AI like '%casa%' 

Tất nhiên, bạn nên chọn một collation phù hợp với bạn ... chỉ cần thay đổi AS để AI ở cuối dòng để làm cho nó "giọng vô cảm"

dụ nhanh với umlauts Đức

DECLARE @foo TABLE (bar varchar(100) /*implied COLLATE Latin1_General_CI_AS*/) 

INSERT @foo VALUES ('xxx fish yyy') 
INSERT @foo VALUES ('xxx bar yyy') 
INSERT @foo VALUES ('xxx bär yyy') 

select * from @foo where bar COLLATE Latin1_General_CI_AI like '%bar%' 
select * from @foo where bar like '%bar%' 
+0

Tôi nghĩ rằng bạn đã lưu trong ngày của tôi ! –

+1

Ngoài ra, bạn có thể thay đổi đối chiếu cho cơ sở dữ liệu của mình nếu bạn luôn muốn tìm kiếm không có dấu trọng âm. –

+0

Một câu hỏi nữa: Bạn có biết cách thực hiện điều này trong LINQ không? Cảm ơn rất nhiều! –

5

Bạn cần sử dụng mệnh đề đối chiếu không có dấu trọng âm.

0

Nếu bạn cần phải làm điều đó trong LINQ, tôi nghĩ rằng bạn phải gỡ bỏ dấu đầu tiên trong chuỗi tìm kiếm và sau đó để thực hiện một truy vấn LINQ ... nó nên làm việc ...

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