2013-02-12 93 views
0

嗨,我有问题,我正在处理第一次。我有MS SQL Server Databse和排序规则Latin1_General_CS_AS(代码1252)。但数据实际上是以立陶宛语'Lithuanian_CS_AS'(代码1257)。我需要获取数据并写入另一个数据库,以'普通'字符串转换 - 可能是unicode。如果这可以帮助解决问题,我也使用SSIS。如何将数据从ASCII转换为Unicode(正确归类)?

数据

B×kÑiÖ g. 11-12

print ASCII(SUBSTRING(@string, @position, 1)) 
    print CHAR(ASCII(SUBSTRING(@string, @position, 1))) 

66 B | 215 × | 107 k | 209 Ñ | 105 i | 214 Ö | 32 | 103 g | 46 . | 32 | 49 1 | 49 1 | 45 - | 49 1 | 50 2 

使用代码http://www.ascii-codes.com/cp775.html这个ASCII页面就必须被转换为:

结果

Būkčių g. 11-12 

也许有sql查询可以转换B×kÑiÖ g. 11-12 --> Būkčių g. 11-12

部分SQLFIDDLESampleData如果你可以将其转换成立陶宛语。我想解决这个方便,无需在“立陶宛”语言的每个字符转换,因为这将是疯狂的:)

更多信息

与软件(报告,表格)使用归类Latin1_General_CS_AS用户数据库,在立陶宛语中,一切都安然无恙(我不知道他们如何看到正确的字母)。我正在使用MS SQL Server 2008 R2。

我可不总是在电脑附近,但我试着回答你所有的问题。谢谢。

回答

1

我来决定使用的功能:REPLACECHAR

在我的情况varchar是为列的数据类型。因此,要转换为正确的语言的话以Unicode(nvarchar)步骤:

  1. 在select语句CSAS atributtes转换为Unicode列:

SELECT cast(column Collate Latin1_General_CS_AS as nvarchar(22))

2。并使用替代语句在实际字母代码转换::

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(cast(column Collate Latin1_General_CS_AS as nvarchar(22)),CHAR(181),N'Ą'), CHAR(208), N'ą'),CHAR(182),N'Č'), CHAR(209), N'č'), CHAR(183), N'Ę'), CHAR(210), N'ę'),CHAR(184), N'Ė'), CHAR(211), N'ė'),CHAR(189), N'Į'),CHAR(212), N'į'), CHAR(190), N'Š'), CHAR(213), N'š'), CHAR(198), N'Ų'), CHAR(214), N'ų'),CHAR(199), N'Ū'), CHAR(215), N'ū'), CHAR(207), N'Ž'), CHAR(216), N'ž') 

结果:

|  ¾ilutÓs pl. 83 |  Šilutės pl. 83 | 
|   B×kÑiÖ g. 11 |   Būkčių g. 11 | 
|   Seni×kÖ km. |   Seniūkų km. | 
3

COLLATE条款怎么样?

从MSDN:

一个选择

下面的示例中指定的排序规则创建一个简单的表格,并插入4行。然后该示例在从表格中选择数据时应用两个归类,演示Chiapas如何排序。

CREATE TABLE Locations 
(Place varchar(15) NOT NULL); 
GO 
INSERT Locations(Place) VALUES ('Chiapas'),('Colima') 
         , ('Cinco Rios'), ('California'); 
GO 
--Apply an typical collation 
SELECT Place FROM Locations 
ORDER BY Place 
COLLATE Latin1_General_CS_AS_KS_WS ASC; 
GO 
-- Apply a Spanish collation 
SELECT Place FROM Locations 
ORDER BY Place 
COLLATE Traditional_Spanish_ci_ai ASC; 
GO 
+0

对不起这不是我要找的,这不符合我的数据的工作。有相同的无法识别的字符。 – Justin 2013-02-12 14:13:45

+1

好吧,你可能想花几分钟阅读整理和编码,但(看到http://msdn.microsoft.com/en-us/library/ms143726.aspx),因为它看起来像你混淆ASCII和目标上的Unicode。另外,也许看看使用nvarchar而不是你的列? – chrisb 2013-02-12 14:40:56

相关问题