MSSQL中含emoji的nvarchar字段正确排序适用的排序规则选择
解决方案
方案1:全版本兼容方案
所有SQL Server 2008 R2及以上版本都可以使用该方案,通过调整排序优先级实现和Excel完全一致的排序效果:
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 -- 优先将emoji等非基础拉丁字符排在前面 CASE WHEN UNICODE(LEFT(Val,1)) < 256 THEN 2 ELSE 1 END, -- 同优先级内容按二进制排序,保证emoji按数量、码点升序,字母按字典序排序 Val COLLATE Latin1_General_100_BIN2
方案2:高版本专用方案
如果你的SQL Server版本为2019及以上,可以直接使用支持最新Unicode标准的排序规则,无需额外逻辑判断:
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_140_CI_AS_SC_UTF8
该排序规则内置了emoji的排序权重,自动将emoji排在拉丁字母之前,排序逻辑和Excel完全对齐。
内容的提问来源于stack exchange,提问作者gsubiran
相关产品推荐
相关产品推荐

