通过排序规则对SQL Server中的多个语言数据进行排序(为什么我的查询不起作用)

时间:2014-12-05 10:03:06

标签: sql-server sorting collation hindi

我有一个包含多种语言数据的表​​格列。

我需要按照我的指定语言进行排序,比如印地语。

如何通过整理或其他方式实现它?

  • 列名:Comments
  • 输入:Nvarchar(MAx)

示例列数据

    This is an example
    To je příklad.
    هذا مثال على ذلك.
    उदाहरण है.
    यह एक उदाहरण है.
    ಈ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.

'印地语'排序后的输出应为:

उदाहरण है.
यह एक उदाहरण है.
This is an example
To je příklad.
هذا مثال على ذلك.
ಈ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.

使用的脚本:

CREATE TABLE dbo.Data
( unicodeData NVARCHAR(200)
)
GO
INSERT INTO dbo.Data ( unicodeData)
VALUES
 ( N'This is an example')
, (N'यह एक उदाहरण है.')
, (N'उदाहरण है.')
, (N'ಈ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.')
, (N'एक उदाहरण है.')
, (N'هذا مثال على ذلك.')
, (N'To je příklad.');
GO

select * from dbo.unicodeData
order by unicodedata Collate Indic_General_100_CI_AI

2 个答案:

答案 0 :(得分:0)

使用Order by Column COLLATE语法。需要使用Indic_General_90_CI_AS排序规则。因为它似乎

  

该参考文献称印地语(在此(2005)版本中已弃用)   已停止并由Indic_General_90_CI_AS(仅限Unicode)替换。

SELECT Comments from TABLEX
ORDER BY Comments 
COLLATE Indic_General_90_CI_AS ASC;

整理和排序通常只使用一种语言。您需要多种语言排序,您需要为数据添加自定义值。我在您的表中添加了languageSortingPriority列,然后使用languageSortingPriority列进行排序。

CREATE TABLE dbo.unicodeData
( 
  languageUsed VARCHAR(50)
  ,languageSortingPriority int
, unicodeData NVARCHAR(200)
, nonUnicodeData VARCHAR(200) -- same data in a normal VARCHAR column for comparison
, comments VARCHAR(100)
)
GO
INSERT INTO dbo.unicodeData (languageUsed, languageSortingPriority,unicodeData, nonUnicodeData, comments)
VALUES
 ('English', 2, N'This is an example', N'This is an example', NULL)
, ('Hindi', 1,N'यह एक उदाहरण है.', N'यह एक उदाहरण है.', 'Using the preceding N in both strings but VARCHAR is still a ?')
, ('Hindi', 1, N'यह एक उदाहरण है.', 'यह एक उदाहरण है.', 'Not using the preceding N in both strings so both are a ?')
, ('Kannada' ,3, N'ಈ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.', N'ಈ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.', NULL)
, ('Arabic', 3,N'هذا مثال على ذلك.', N'هذا مثال على ذلك.', NULL)
, ('Czech', 2 ,N'To je příklad.', N'To je příklad.', NULL);
GO

select * from dbo.unicodeData
order by languageSortingPriority,unicodedata Collate Indic_General_100_CI_AI DESC

请在此处查看sql fiddle

答案 1 :(得分:0)

美好的一天,我已经在MSDN论坛上回答了OP问题。基本上你需要按每个排序规则排序。

你可以在这里看到原始帖子,答案是: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ccc1d16f-926f-46c8-8579-b2eecf661e7c/sort-miultiple-language-data-in-sql-serevr-by-collation?forum=transactsql

您可以在TechNet上看到有关此问题的文章: http://social.technet.microsoft.com/wiki/contents/articles/31194.t-sql-sort-data-by-multiple-languages.aspx

我希望这很有用: - )