tri*_*bus 1 sql t-sql sql-server ascii
我有一个标量值函数,它返回包含ASCII单元分隔符Char(31)的varchar数据.我将此结果用作Order By子句的一部分,并尝试按升序排序.
我的标量值函数返回如下结果(拼出不可打印的字符以供参考)
我希望当我按升序排序时,结果如下:
相反,我看到结果完全相反:
现在我相当肯定这与不可打印的角色有关,但我不确定为什么.知道为什么会这样吗?
谢谢
您可以通过COLLATION设置来影响排序顺序.在脚本之后,明确地使用Latin1_General_CI_ASas collation命令项目,如您所期望的那样.
;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
Run Code Online (Sandbox Code Playgroud)
你使用什么整理?您可以使用以下方法验证当前的数据库归类设置
SELECT DATABASEPROPERTYEX('master', 'Collation') SQLCollation;
Run Code Online (Sandbox Code Playgroud)