2014-12-05 1 views
2

У меня есть столбец таблицы, который имеет несколько языковых данных.Сортировка нескольких языковых данных в SQL Server путем сортировки (почему мой запрос не работает)

Мне нужно сортировать в соответствии с указанным мной языком, например, хинди.

Как достичь этого, хотя сопоставление или что-то еще?

  • Имя столбца: Comments
  • Тип: Nvarchar(MAx)

данных Sample столбцов

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

+0

какая база данных? sql server, oracle? –

+0

Sql Server 2008 R2/2012 – Shashank

ответ

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 здесь.

+0

Hi Atilla, Спасибо за ваш быстрый ответ, но ваш заданный запрос не дает нужный результат, упомянутый в моем комментарии. Я использовал следующий скрипт, но не успел. – Shashank

+0

@Shashank это встроенное решение. Если вам нужно что-то особенное, вы должны уточнить свой вопрос, чтобы предоставить дополнительную информацию? Например, вы можете добавить «Почему мой запрос не работает?» –

+0

I heve редактировать и упоминать мой скрипт в запросе, пожалуйста, найдите. – Shashank

0

Добрый день, я уже ответил на вопрос OP на форумах MSDN. в основном вам нужно сортировать по каждому из них.

вы можете увидеть оригинальную нить здесь, с ответом: 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

Я надеюсь, что это полезно :-)

Смежные вопросы