4

我正在研究將SQL Server作爲後端的現有系統。我們開始使用多種語言(包括西里爾字符和其他歐洲語言的俄語)存儲臨時項目標題數據。我的問題是關於排序這些數據,我可以根據需要更改排序順序而不更改排序規則?我可以決定查詢本身的排序嗎?在SQL Server查詢期間更改排序規則?適用於英語/西里爾語/ EU語言的排序

這裏有一個簡單的查詢,我跟打,試圖看到:

SELECT STR FROM (
SELECT N'а01' AS STR UNION 
SELECT N'б02' AS STR UNION 
SELECT N'в03' AS STR UNION 
SELECT N'г04' AS STR UNION 
SELECT N'д05' AS STR UNION 
SELECT N'е06' AS STR UNION 
SELECT N'ё07' AS STR UNION 
SELECT N'ж08' AS STR UNION 
SELECT N'з09' AS STR UNION 
SELECT N'и10' AS STR UNION 
SELECT N'й11' AS STR UNION 
SELECT N'к12' AS STR UNION 
SELECT N'л13' AS STR UNION 
SELECT N'м14' AS STR UNION 
SELECT N'н15' AS STR UNION 
SELECT N'о16' AS STR UNION 
SELECT N'п17' AS STR UNION 
SELECT N'р18' AS STR UNION 
SELECT N'с19' AS STR UNION 
SELECT N'т20' AS STR UNION 
SELECT N'у21' AS STR UNION 
SELECT N'ф22' AS STR UNION 
SELECT N'х23' AS STR UNION 
SELECT N'ц24' AS STR UNION 
SELECT N'ч25' AS STR UNION 
SELECT N'ш26' AS STR UNION 
SELECT N'щ27' AS STR UNION 
SELECT N'ъ28' AS STR UNION 
SELECT N'ы29' AS STR UNION 
SELECT N'ь30' AS STR UNION 
SELECT N'э31' AS STR UNION 
SELECT N'ю32' AS STR UNION 
SELECT N'я33' AS STR UNION 
SELECT N'a34' AS STR UNION 
SELECT N'b35' AS STR UNION 
SELECT N'c36' AS STR UNION 
SELECT N'd37' AS STR UNION 
SELECT N'e38' AS STR UNION 
SELECT N'f39' AS STR UNION 
SELECT N'g40' AS STR UNION 
SELECT N'h41' AS STR UNION 
SELECT N'i42' AS STR UNION 
SELECT N'j43' AS STR UNION 
SELECT N'k44' AS STR UNION 
SELECT N'l45' AS STR UNION 
SELECT N'm46' AS STR UNION 
SELECT N'n47' AS STR UNION 
SELECT N'o48' AS STR UNION 
SELECT N'p49' AS STR UNION 
SELECT N'q50' AS STR UNION 
SELECT N'r51' AS STR UNION 
SELECT N's52' AS STR UNION 
SELECT N't53' AS STR UNION 
SELECT N'u54' AS STR UNION 
SELECT N'v55' AS STR UNION 
SELECT N'w56' AS STR UNION 
SELECT N'x57' AS STR UNION 
SELECT N'y58' AS STR UNION 
SELECT N'z59' AS STR UNION 
SELECT N'A60' AS STR UNION 
SELECT N'B70' AS STR UNION 
SELECT N'C71' AS STR UNION 
SELECT N'D72' AS STR UNION 
SELECT N'E73' AS STR UNION 
SELECT N'F74' AS STR UNION 
SELECT N'G75' AS STR UNION 
SELECT N'H76' AS STR UNION 
SELECT N'I77' AS STR UNION 
SELECT N'J78' AS STR UNION 
SELECT N'K79' AS STR UNION 
SELECT N'L80' AS STR UNION 
SELECT N'M81' AS STR UNION 
SELECT N'N82' AS STR UNION 
SELECT N'O83' AS STR UNION 
SELECT N'P84' AS STR UNION 
SELECT N'Q85' AS STR UNION 
SELECT N'R86' AS STR UNION 
SELECT N'S87' AS STR UNION 
SELECT N'T88' AS STR UNION 
SELECT N'U89' AS STR UNION 
SELECT N'V90' AS STR UNION 
SELECT N'W91' AS STR UNION 
SELECT N'X92' AS STR UNION 
SELECT N'Y93' AS STR UNION 
SELECT N'Z94' AS STR 
) AS SUBTABLE 
ORDER BY STR ASC 

我得到的順序是這樣的:

a34 
A60 
b35 
B70 
c36 
C71 
d37 
D72 
e38 
E73 
f39 
F74 
g40 
G75 
h41 
H76 
i42 
I77 
j43 
J78 
k44 
K79 
l45 
L80 
m46 
M81 
n47 
N82 
o48 
O83 
p49 
P84 
q50 
Q85 
r51 
R86 
s52 
S87 
t53 
T88 
u54 
U89 
v55 
V90 
w56 
W91 
x57 
X92 
y58 
Y93 
z59 
Z94 
а01 
б02 
в03 
г04 
д05 
е06 
ё07 
ж08 
з09 
и10 
й11 
к12 
л13 
м14 
н15 
о16 
п17 
р18 
с19 
т20 
у21 
ф22 
х23 
ц24 
ч25 
ш26 
щ27 
ъ28 
ы29 
ь30 
э31 
ю32 
я33 

它看起來像一些西里爾字符的相似他們的英文等值,是否有辦法將這些交錯作爲「A到Z」的一部分?

SQL Server中還有哪些其他排序選項?

如果我不能在查詢中做到這一點,什麼是每列選擇最強大的排序規則?

+0

將西里爾字符與拉丁字符交錯的意義是什麼?根據一些潛在的比較最終顯示訂購。比較藍色和暖色的感覺是什麼? – 2010-10-05 16:17:02

+0

我看到一個像'у'這樣的字符,而且看起來像'y'。但它似乎不是。我想知道,在具有異構數據的名稱或標題列表中,是否對兩個相似的字形是否可以排序相同有任何選擇。我不會說它將藍色與溫暖進行比較,更像是詢問在我可以使用的某種排序算法中,我是否擁有該選項。如果這是一個愚蠢的問題,請原諒我。 – artlung 2010-10-05 16:35:37

回答

10

您可以選擇西里爾語排序規則,如:

order by STR collate Cyrillic_General_CI_AI 

歸類的完整列表,可以將呼叫發現:

select * from ::fn_helpcollations() 

CS意味着大小寫敏感的,AI是指不區分重音。