【发布时间】:2021-11-05 10:33:30
【问题描述】:
我想知道我应该使用哪种排序规则来为包含文本和表情符号的 nvarchar 列获得一致的排序。
无论如何,预期的结果是这样的(按 MS Excel 排序):
第一次尝试:SQL_Latin1_General_CP1_CI_AI
SELECT Val
FROM (VALUES
(N'⭐⭐⭐'),
(N'⭐⭐⭐'),
(N'????'),
(N'⭐⭐'),
(N'⭐⭐'),
(N'????????'),
(N'⭐'),
(N'❗❗'),
(N'❗❗'),
(N'❗'),
(N'❗'),
(N'❗❗❗'),
(N'❗❗❗'),
(N'bb'),
(N'ab'),
(N'aa')
) AS A (Val)
ORDER BY Val COLLATE SQL_Latin1_General_CP1_CI_AI
结果(与预期不同):
第二次尝试(基于此答案https://stackoverflow.com/a/47551803/2336493):Latin1_General_100_CI_AS_SC
SELECT Val
FROM (VALUES
(N'⭐⭐⭐'),
(N'⭐⭐⭐'),
(N'????'),
(N'⭐⭐'),
(N'⭐⭐'),
(N'????????'),
(N'⭐'),
(N'❗❗'),
(N'❗❗'),
(N'❗'),
(N'❗'),
(N'❗❗❗'),
(N'❗❗❗'),
(N'bb'),
(N'ab'),
(N'aa')
) AS A (Val)
ORDER BY Val COLLATE Latin1_General_100_CI_AS_SC;
结果(与预期不同):
有人处理过吗?
【问题讨论】:
-
你为什么认为这是正确的顺序?为什么 ASCII 字符串会排在 any emoji 之后?
aa-bb应该总是出现在任何以表情符号开头的文本之前。无论如何,没有一种语言有表情符号,所以不应该期望正常的排序规则来对它们进行排序。 -
@PanagiotisKanavos 我同意你的观点,但这个顺序是我在写这个问题时发现的最准确的。
-
根本不准确。 ASCII 字母不能出现在 40 年后添加的表情符号之后。 Excel 在这种情况下使用自己的规则,可能通过一些奇怪的转换将所有值都视为数字
-
当我在 Excel for Mac 中尝试这些表情符号时,表情符号总是出现在字母之前和数字之后。它们也出现在被视为文本的数字之前,即
'0、'1、'2。标志不出现在字母之后。因此,Excel确实将表情符号视为数字,但将它们在实际数字之后排序。这是 Excel 特有的,可能是因为 Excel 使用此类字形作为仪表板中的指示符 -
我尝试了更多表情符号,但 Excel 的顺序不是很一致,但它确实建议将表情符号视为“数字”。我发布了结果
标签: sql-server azure-sql-database collation