对保存为 varchar 的大数字进行排序

Tre*_*ood 2 mysql order-by

据我所知,无符号bigint是mysql中最大的int大小。因此,为了更好地衡量,我使用 varchar(255) 因为我的数据库中的某些值大于无符号的 bigint。

\n

我希望对它们进行排序,就好像它们是一个 int 一样。这可能吗?

\n

示例:\n999,1000,1001

\n

通过 Int 订购此值为 999,1000,1001 或 1001,1000,999

\n

通过 varchar 排序\n1000,1001,999 或 999,1001,1000

\n

由于通过 varchar 排序每次比较一个字符串

\n

我\xe2\x80\x99m想知道\xe2\x80\x99是否可以通过varchar存储它但像int一样排序

\n

And*_*y M 7

如果所有值都是正整数并且它们从来没有前导 0,您可以尝试以下排序方法:

SELECT
  *
FROM
  MyTableOfBigNumbers
ORDER BY
  CHAR_LENGTH(IntegerStringColumn) ASC
, IntegerStringColumn              ASC
;
Run Code Online (Sandbox Code Playgroud)

这样,较短的字符串文字将正确地出现在较长的字符串文字之前,正如预期的那样。具有相同位数的数字将根据您的活动排序规则进行排序,我希望它已经以合理的方式对数字进行排序(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。

要反转排序方向,只需替换ASCDESC

SELECT
  *
FROM
  MyTableOfBigNumbers
ORDER BY
  CHAR_LENGTH(IntegerStringColumn) DESC
, IntegerStringColumn              DESC
;
Run Code Online (Sandbox Code Playgroud)