Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Chuyển tiếng Việt có dấu sang không dấu trong Microsoft SQL Server

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định Chuyển tiếng Việt có dấu sang không dấu trong Microsoft SQL Server

    Đây là một function giúp bạn chuyển tiếng Việt có dấu sang không dấu trong SQL

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

    Cách cài đặt:
    - Mở Microsoft SQL Management Tool hoặc bất cứ công cụ nào cho phép Execute Query
    - Đưa đoạn code SQL trên vào và nhấn Execute Query

    Cách sử dụng:
    Ví dụ 1: Lựa chọn một trường không dấu ta viết, ví dụ trường Diachi từ bảng Account
    T-SQL Code:
    1. SELECT dbo.fChuyenCoDauThanhKhongDau(Diachi) FROM Account

    Ví dụ 2: Tìm kiếm không dấu, tìm tất cả các tên có chứa 'C Viet' trong bảng Account
    T-SQL Code:
    1. SELECT Ten, Diachi FROM Account WHERE dbo.fChuyenCoDauThanhKhongDau(Ten) LIKE '%C Viet%'

    Đối với dân lập trình SQL, SQL Desinger, ... thì function SQL này cực kỳ hữu ích. Nhưng đối với những nhà phát triển phần mềm thì đây là điều không mấy hứng thú. Trong bài viết tới, Kevin sẽ đưa ra một phương pháp cho những nhà phát triển phần mềm.

  2. #2
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    cái này khá hữu ích trong v/v tìm kiếm dữ liệu , mấy trang nghe nhạc như mp3.zing.vn , nhaccuatui.com.... ứng dụng nhiều cái này.

  3. #3
    Ngày gia nhập
    05 2011
    Bài viết
    78

    Hehe, em đang làm chương trình quản lý và gửi tin nhắn như phần mềm của mấy cái 3G, chắc cái này sẽ hữu ích đây, thanks anh.

  4. #4
    Ngày gia nhập
    12 2010
    Bài viết
    99

    Cái này hay đấy cảm ơn bạn nhé ! Hy vọng bài mới của bạn sớm hoàn thành

  5. #5
    Ngày gia nhập
    04 2012
    Bài viết
    12

    Cám ơn anh Kevin nhiều. Cái này hay lắm. Em ứng dụng được vào dự án luôn. Rất hữu ích

  6. #6
    Ngày gia nhập
    05 2012
    Bài viết
    149

    Mặc định Chuyển tiếng Việt có dấu sang không dấu trong Microsoft SQL Server

    đang gặp vấn đề với cái đ và d, mýql hỗ trợ rất tốt tìm kiếm tiếng việt có dấu, nó chỉ còn chưa phân biệt d và đ thôi.

  7. #7
    Ngày gia nhập
    06 2012
    Bài viết
    1

    Mặc định nên check lại

    những kí tự có 2 dấu (vd: ế, ấ,..) nó cho ra kp quả là é, á. Còn chữ ờ thì ra dấu ?

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn thiết lập COLLATION không đúng nên function trên không chuyển đổi được <= khi đó function trên chỉ là tham khảo. Nếu bạn am hiểu bạn có thể sửa lại cho phù hợp một cách dễ dàng đấy!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  9. #9
    Ngày gia nhập
    04 2012
    Bài viết
    3

    Mặc định không hiển thị kết quả của tìm kiếm

    mình có sử lại hàm của @Kenvin Hoang

    T-SQL Code:
    1. USE [BANVEMAYBAY]
    2. GO
    3. /****** Object:  UserDefinedFunction [dbo].[fc_ConvertString]    Script Date: 10/09/2013 3:12:12 PM ******/
    4. SET ANSI_NULLS ON
    5. GO
    6. SET QUOTED_IDENTIFIER ON
    7. GO
    8. ALTER FUNCTION [dbo].[fc_ConvertString]
    9. (
    10.       @strInput NVARCHAR(4000)
    11. )
    12. RETURNS NVARCHAR(4000)
    13. AS
    14. BEGIN  
    15.     IF @strInput IS NULL RETURN @strInput
    16.     IF @strInput = '' RETURN @strInput
    17.     DECLARE @RT NVARCHAR(4000)
    18.     DECLARE @SIGN_CHARS NCHAR(136)
    19.     DECLARE @UNSIGN_CHARS NCHAR (136)
    20.     SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệế
    21.                   ìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵý
    22.                   ĂÂĐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍ
    23.                   ÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ'
    24.                   +NCHAR(272)+ NCHAR(208)
    25.     SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeee
    26.                   iiiiiooooooooooooooouuuuuuuuuuyyyyy
    27.                   AADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIII
    28.                   OOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD'
    29.     DECLARE @COUNTER int
    30.     DECLARE @COUNTER1 int
    31.     SET @COUNTER = 1
    32.     WHILE (@COUNTER <=LEN(@strInput))
    33.     BEGIN
    34.       SET @COUNTER1 = 1
    35.       --Tìm trong chuỗi mẫu
    36.        WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1)
    37.        BEGIN
    38.      IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1))
    39.             = UNICODE(SUBSTRING(@strInput,@COUNTER ,1) )
    40.      BEGIN        
    41.           IF @COUNTER=1
    42.               SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)
    43.               + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1)  
    44.           ELSE
    45.               SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1)
    46.               +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)
    47.               + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)- @COUNTER)
    48.               BREAK
    49.                END
    50.              SET @COUNTER1 = @COUNTER1 +1
    51.        END
    52.       --Tìm tiếp
    53.        SET @COUNTER = @COUNTER +1
    54.     END
    55.     SET @strInput = replace(@strInput,' ','-')
    56.     RETURN @strInput
    57. END

    procedure tìm kiếm của mình được viết như sau:
    Code:
    select *
    	from AIRPORT
    	WHERE Lower(LTRIM(RTRIM(+ dbo.fc_ConvertString(AirportName)))) LIKE N'%' + @AirportName + '%'
    mình chỉ thay thế tên của biến để truyền vào....
    nhưng khi mình chạy thử execute sp_Airport_Find_Name 'Vinh' thì nó vẫn ko hiển thị lên kết quả
    execute sp_Airport_Find_Name 'Nội Bài' thì cũng ko hiện thị lên kết quả luôn.
    không biết mình đã sai chỗ nào rồi nhỉ.
    Nhân tiện đây bạn cho mình hỏi muốn thiết lập COLLATION về tiếng việt thì nên làm như thế nào!
    thank mod!

  10. #10
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn sử dụng collection mặc định(SQL_Latin1_General_CP1_CI_AS) thì sẽ được, còn nếu sử dụng collection khác thì bạn phải thay đổi lại tùy theo collection đó!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Copy data từ SQL Server qua MySQL | Chuyển database từ SQL Server sang MySQL?
    Gửi bởi huynhngocduc_63 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 16-12-2014, 01:27 PM
  2. Chuyển từ sql server sang sql server compact trong visual studio 2010
    Gửi bởi ndnhan trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 18-11-2012, 12:52 PM
  3. ADO.NET Microsoft SQL Server và Microsoft Visual Studio 2010
    Gửi bởi thptnguyenvancu.tsbn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 12-11-2012, 09:41 PM
  4. Chuyển tiếng việt có dấu sang ko dấu trong LINQ
    Gửi bởi nguoimaulanh611 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 29-05-2012, 04:24 PM
  5. Cài đặt microsoft studio 2008 và bộ microsoft SQL server trên cùng một máy
    Gửi bởi vanthai trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 7
    Bài viết cuối: 25-04-2010, 01:40 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn