PDA

View Full Version : Tìm kiếm không dấu



zzzo0ozzz90
07-06-2011, 17:14
Nhờ mọi người chỉ giúp mình cái hàm Search khi tìm kiếm không dấu sẽ trả về có dấu:
ví dụ mình tìm người tên " Thuy " thì sẽ ra Thúy, Thủy, Thùy nếu CSDL tồn tại những người này.
Mong các bạn giúp đỡ!

cao_hung
07-06-2011, 17:26
Cái này dễ thui. Trước tiên bạn Convert chuổi cần tìm và chuổi nội dung trong CSDL sang không dấu. Sau đó sử dụng hàm Like như bình thường. Còn hàm để Convert từ có dấu sang không dấu thì trên net có nhiều rồi, cái này bạn tự tìm nhé.

zzzo0ozzz90
07-06-2011, 17:34
Bạn có thể nói rõ giúp mình được không. Cách convert chuỗi nội dung trong CSDL. còn hàm convert thì mình có rồi. Thank bạn nhé!

cao_hung
07-06-2011, 21:38
Điều bạn cần làm là
1. Convert cả chuổi cần tìm và chuổi nội dung sang không dấu.
2. Sau khi đã có hai chuỗi không dấu rồi thì bạn. Bạn cần kiểm tra xem chuổi nội dung có chứa chuổi cần tìm hay không.


Cụ thể bạn làm như sau.
1. Viết một Function convert từ có dấu sang không dấu.
2. Trong điều kiện where của mệnh đề select bạn cần so sánh chuổi cần tìm và chuổi nội dung sau khi đã gọi Function Convert.


Còn đây là Function Convert từ có dấu sang không dấu mình tìm được trên net. ban tham khảo thêm.



CREATE FUNCTION [dbo].[GetUnsignString](@strInput NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
IF @strInput IS NULL RETURN @strInput
IF @strInput = '' RETURN @strInput
DECLARE @RT NVARCHAR(4000)
DECLARE @SIGN_CHARS NCHAR(136)
DECLARE @UNSIGN_CHARS NCHAR (136)

SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩ ậấèẻẽẹéềểễệếìỉĩịíò ỏõọóồổỗộốờởỡợớùủũụ úừửữựứỳỷỹỵýĂÂĐÊÔƠƯÀẢ ÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉ ỀỂỄỆẾÌỈĨỊÍÒỎÕỌÓỒỔỖ ỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲ ỸỴÝ'+NCHAR(272)+ NCHAR(208)
SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeeeiiiiiooooooooooo oooouuuuuuuuuuyyyyyAADEOOUAAAAAAAAAAAAAAAEEEEEEEEE EIIIIIOOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD'

DECLARE @COUNTER int
DECLARE @COUNTER1 int
SET @COUNTER = 1

WHILE (@COUNTER <=LEN(@strInput))
BEGIN
SET @COUNTER1 = 1
--Tim trong chuoi mau
WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1)
BEGIN
IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1)) = UNICODE(SUBSTRING(@strInput,@COUNTER ,1) )
BEGIN
IF @COUNTER=1
SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1)
ELSE
SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1) +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)- @COUNTER)
BREAK
END
SET @COUNTER1 = @COUNTER1 +1
END
--Tim tiep
SET @COUNTER = @COUNTER +1
END
RETURN @strInput
END


Nguồn của Function Convert này ở đây:http://www.ddth.com/showthread.php?t=330883