0

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

资料

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

使用此 ASCII 码页面http://www.ascii-codes.com/cp775.html必须将其转换为:

结果

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。

我不能总是靠近电脑,但我会尽量回答你所有的问题。谢谢你。

4

2 回答 2

3

COLLATE子句怎么样?

来自 MSDN:

在选择期间指定排序规则

下面的示例创建一个简单的表并插入 4 行。然后,该示例在从表中选择数据时应用了两个排序规则,展示了恰帕斯州是如何以不同方式排序的。

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
于 2013-02-12T13:38:25.673 回答
1

我已经决定使用函数:REPLACE CHAR

在我的情况下varchar是列的数据类型。nvarchar因此,要在 unicode ( ) 步骤中转换为正确的语言单词:

  1. 使用select 语句中的CS和属性转换 unicode 中的列:AS

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(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. |
于 2013-02-26T08:03:42.867 回答