Vấn đề chuyển đổi font chữ trong SQL đã được nhắc đến nhiều, và nếu bạn là lập trình viên và đã làm nhiều dự án chắc là bạn đã từng gặp vấn đề này: Chuyển font từ TCVN3 sang Unicode.
Tôi xin giới thiệu các bạn hàm convert sau:
CREATE FUNCTION dbo.funConvertToUnicode
(@strInput VARCHAR(4000) )
RETURNS NVARCHAR(4000) AS
BEGIN
DECLARE @strOutput NVARCHAR(4000)
DECLARE @TCVN CHAR(671)
DECLARE @UNICODE CHAR(671)
SET @TCVN =
',184, 181, 182, 183, 185, 168, 190, 187, 188, 189, 198,
169, 202, 199, 200, 201, 203, 208, 204, 206, 207, 209,
170, 213, 210, 211, 212, 214, 221, 215, 216, 220, 222,
227, 223, 225, 226, 228, 171, 232, 229, 230, 231, 233,
172, 237, 234, 235, 236, 238, 243, 239, 241, 242, 244,
173, 248, 245, 246, 247, 249, 253, 250, 251, 252, 254,
174, 184, 181, 182, 183, 185, 161, 190, 187, 188, 189, 198,
162, 202, 199, 200, 201, 203, 208, 204, 206, 207, 209, 163,
213, 210, 211, 212, 214, 221, 215, 216, 220, 222, 227, 223,
225, 226, 228, 164, 232, 229, 230, 231, 233, 165, 237, 234,
235, 236, 238, 243, 239, 241, 242, 244, 166, 248, 245, 246,
247, 249, 253, 250, 251, 252, 254, 167, '
SET @UNICODE =
',225, 224, 7843,227, 7841,259, 7855,7857,7859,7861,7863,
226, 7845,7847,7849,7851,7853,233, 232, 7867,7869,7865,234,
7871,7873,7875,7877,7879,237, 236, 7881,297, 7883,243, 242,
7887,245, 7885,244, 7889,7891,7893,7895,7897,417, 7899,7901,
7903,7905,7907,250, 249, 7911,361, 7909,432, 7913,7915,7917,
7919,7921,253, 7923,7927,7929,7925,273, 193, 192, 7842,195,
7840,258, 7854,7856,7858,7860,7862,194, 7844,7846,7848,7850,
7852,201, 200, 7866,7868,7864,202, 7870,7872,7874,7876,7878,
205, 204, 7880,296, 7882,211, 210, 7886,213, 7884,212, 7888,
7890,7892,7894,7896,416, 7898,7900,7902,7904,7906,218, 217,
7910,360, 7908,431, 7912,7914,7916,7918,7920,221, 7922,
7926,7928,7924,272, '
IF @strInput IS NULL RETURN ''
IF @strInput = '' RETURN ''
DECLARE @COUNTER INT
DECLARE @POSITION INT
SET @COUNTER = 1
SET @strOutput = ''
WHILE (@COUNTER <= LEN(@strInput))
BEGIN
SET @POSITION = CHARINDEX(','+CONVERT(CHAR(4),
ASCII(SUBSTRING(@strInput, @COUNTER, 1)))+',', @TCVN, 1)
IF @POSITION > 0
SET @strOutput = @strOutput +
NCHAR(CONVERT(INT,SUBSTRING(@UNICODE, @POSITION+1, 4)))
ELSE
SET @strOutput = @strOutput + SUBSTRING(@strInput, @COUNTER, 1)
SET @COUNTER = @COUNTER + 1
END
RETURN @strOutput
END
Chú ý để hàm chạy đúng bạn cần để
SET @TCVN = ',184, 181, 182,...'
và
SET @UNICODE = ',225, 224, 7843,...'
Mỗi biến trên cùng 1 dòng code. Ở đây mình không trình bày được như vậy vì nếu để trên cùng dòng sẽ quá độ rộng của trình duyệt
Để chạy thử hàm trên bạn mở notepad, chọn font (Unikey) là TCVN3 và gõ vào chuỗi bất kỳ.
Vì dụ:
SELECT [dbo].[fuConvertToUnicode] ('Céng hßa x· héi chñ nghÜa ViÖt Nam')
--> Cộng hòa xã hội chủ nghĩa Việt Nam