gpt4 book ai didi

sql - 在所有排序规则下包含相同长度整数的字符串的数字排序顺序

转载 作者:行者123 更新时间:2023-12-02 07:28:56 28 4
gpt4 key购买 nike

可以安全地假设 SQL Server 中的所有排序规则都会对包含相同长度整数的字符串给出“预期的”(即数字)排序顺序吗?例如,假设 @text仅包含非负整数 ( [0-9]+ ),以下代码片段是否可以确保该值不会溢出 int范围,或者可能有一些排序规则 @text <= '2147483647'给出意想不到的结果?

IF LEN(@text) BETWEEN 1 AND 9 
OR LEN(@text) = 10 AND @text <= '2147483647'
-- ...

不会出现可变长度比较的情况(例如 '2' < '11' ),因此请不要解决该问题。

最佳答案

SQL Server 排序规则不保证有关编码的任何内容。它们是从字符的二进制表示到通常理解的字符的映射。

为此,我认为相关的概念是“代码页”:

Code Page

A code page is an ordered set of characters of a given script in which a numeric index, or code point value, is associated with each character. A Windows code page is commonly referred to as a character set or charset. Code pages are used to provide support for the character sets and keyboard layouts that are used by different Windows system locales. All Windows Server 2008 Unicode collations are Unicode 5.0-based.

“有序”部分是这个问题感兴趣的部分。排序决定字符是否按数字“自然”排序。

因此,排序规则的概念并不要求数字自然排序。

就是说,我不知道任何地方的数字 '0' - '9' 不是自然排序的排序规则。在 Unicode 标准中,数字是自然排序的。我想不出为什么有人会创建这样的排序规则。因此,在实践中,如果存在这样的排序规则,我会非常非常惊讶。而且,如果是这样,它可能不符合 Unicode,因此在 SQL Server 中不可用。

在实践中,不存在这样的排序规则,或者至少没有这样的排序规则被广泛使用。排序规则的定义不能保证自然排序,但它是 Unicode 字符集的一部分。您可以非常安全地假设所有排序规则都具有数字的自然排序,但理论上可以创建具有非自然数字排序的字符集。

关于sql - 在所有排序规则下包含相同长度整数的字符串的数字排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com