2013-02-12 80 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

相關問題