我有一个标量值函数,该函数返回包含ASCII单位分隔符Char(31)的数据的varchar。我将此结果用作Order By子句的一部分,并尝试按升序排序。
我的标量值函数返回如下结果(拼写供参考的不可打印字符)
我希望当我通过升序订购时,结果如下:
相反,我看到的是完全相反的结果:
现在,我相当确定这与不可打印字符有关,但是我不确定为什么。知道为什么会这样吗?
谢谢
排序顺序可能会受到COLLATION设置的影响。在脚本之后,显式使用Latin1_General_CI_AS排序规则来按期望的顺序对项目进行排序。
Latin1_General_CI_AS
;WITH q (Col) AS ( SELECT 'ABC' UNION ALL SELECT 'ABC' + CHAR(31) + 'DEF' UNION ALL SELECT 'ABC' + CHAR(31) + 'DEF' + CHAR(31) + 'HIJ' ) SELECT * FROM q ORDER BY Col COLLATE Latin1_General_CI_AS
您正在使用什么排序规则?您可以使用以下命令验证当前的数据库排序规则设置
SELECT DATABASEPROPERTYEX('master', 'Collation') SQLCollation;