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是指不区分重音。