在SQL Server中查询期间更改排序规则?适当的英语/西里尔语/欧盟语言

art*_*ung 4 sql-server localization sql-server-2005 internationalization

我正在研究一个以SQL Server作为后端的现有系统.我们开始以多种语言(包括西里尔字母和其他欧洲语言的俄语)存储临时项目标题数据.我的问题是关于对这些数据进行排序,我可以选择在不更改排序规则的情况下按需更改排序顺序?我可以决定查询本身的排序规则吗?

这是我正在玩的示例查询,试图看到:

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
Run Code Online (Sandbox Code Playgroud)

我收到的订单是这样的:

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
Run Code Online (Sandbox Code Playgroud)

看起来有些西里尔字符与它们的英文字母相似,是否有办法将这些交错作为"A到Z"的一部分?

SQL Server中还有哪些其他排序选项?

如果我不能在查询中执行此操作,那么每列选择最强大的排序规则是什么?

And*_*mar 10

您可以选择西里尔语校对,例如:

order by STR collate Cyrillic_General_CI_AI
Run Code Online (Sandbox Code Playgroud)

通过调用以下内容,可以找到完整的排序列表:

select * from ::fn_helpcollations()
Run Code Online (Sandbox Code Playgroud)

CS表示区分大小写,AI表示重音不敏感.