15/10/2018, 22:10

[SQLSERVER] Hướng dẫn tạo function bỏ dấu tiếng việt Unicode

Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách bỏ dấu tiếng việt trong cơ sở dữ liệu Microsoft Sqlserver . Trong lập trình ứng dụng hay website, nhiều lúc các bạn sẽ làm việc với các hàm tìm kiếm. Ví dụ: Khi các bạn muốn tìm ...

Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách bỏ dấu tiếng việt trong cơ sở dữ liệu Microsoft Sqlserver.

Trong lập trình ứng dụng hay website, nhiều lúc các bạn sẽ làm việc với các hàm tìm kiếm.

Ví dụ: Khi các bạn muốn tìm kiếm mà người dùng nhập vào không dấu thì sqlserver tự động tìm kiếm theo không dấu.

Source code Function Non_Unicode_Convert:

CREATE FUNCTION [dbo].[non_unicode_convert](@inputVar NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX)
AS
BEGIN    
    IF (@inputVar IS NULL OR @inputVar = ')  RETURN '
   
    DECLARE @RT NVARCHAR(MAX)
    DECLARE @SIGN_CHARS NCHAR(256)
    DECLARE @UNSIGN_CHARS NCHAR (256)
 
    SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệếìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵýĂÂĐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ' + NCHAR(272) + NCHAR(208)
    SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeeeiiiiiooooooooooooooouuuuuuuuuuyyyyyAADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD'
 
    DECLARE @COUNTER int
    DECLARE @COUNTER1 int
   
    SET @COUNTER = 1
    WHILE (@COUNTER <= LEN(@inputVar))
    BEGIN  
        SET @COUNTER1 = 1
        WHILE (@COUNTER1 <= LEN(@SIGN_CHARS) + 1)
        BEGIN
            IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1)) = UNICODE(SUBSTRING(@inputVar,@COUNTER ,1))
            BEGIN          
                IF @COUNTER = 1
                    SET @inputVar = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@inputVar, @COUNTER+1,LEN(@inputVar)-1)      
                ELSE
                    SET @inputVar = SUBSTRING(@inputVar, 1, @COUNTER-1) +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@inputVar, @COUNTER+1,LEN(@inputVar)- @COUNTER)
                BREAK
            END
            SET @COUNTER1 = @COUNTER1 +1
        END
        SET @COUNTER = @COUNTER +1
    END
    -- SET @inputVar = replace(@inputVar,' ','-')
    RETURN @inputVar
END

Ví dụ: bây giờ mình sẽ nhập vào từ khóa không dấu là "Nhat ban" thì kết quả trả về của chúng ta mong muốn là có từ Nhật Bản.

Code tìm kiếm sqlserver:

DECLARE @query NVARCHAR(max)
SELECT @query =  dbo.non_unicode_convert(N'nhat ban')
SELECT * FROM dbo.tbl_baiviet WHERE dbo.non_unicode_convert(title) LIKE  '%' + @query+ '%'

Kết quả thực hiện truy vấn trên

Remove unicode sqlserver Xóa bỏ unicode trong sqlserver

HAVE FUN :)

Tags: bỏ dấu unicodebỏ dấu tiếng việt sqlserverremove unicode
0