1

我有一个 mysql 数据库,其中字段“order_number”在奇数情况下设置为 INT,订单号需要有一个尾随 r,例如 2100r,显然 INT 只会接受数字,如果我使用 VARCHAR,它将正确地对数字进行 ASC 或 DESC 排序为了克服这个限制,它将正确接受尾随的 r 字符,但不会按数字顺序正确排序数字,有没有办法强制 INT 选项接受一个字符?

4

5 回答 5

1

如果其中任何一个包含字母,您需要将您的帐户 ID 存储为字符串。但只要字母始终是后缀,您就可以正确排序。无论您的 AccountID 值是否有前导空格,这都有效。

   SELECT *
     FROM Account
 ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID 

这将按数字排序,然后通过词法排序来处理任何相等的数字。

http://sqlfiddle.com/#!2/a16bf/8/0

如果您希望“r”订单以相同的数字显示在他们朴素的朋友面前,您可以这样做:

   SELECT *
     FROM Account
 ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID DESC
于 2012-08-16T12:08:10.203 回答
0

您可以CAST在 MySQL 中使用函数,但order_number在将新数据插入表中之前使用类型转换将其存储为 int 是一个好习惯。

SELECT CAST(int_col AS CHAR);

SELECT CAST(char_col AS unsigned INTEGER);
于 2012-08-16T11:33:48.023 回答
0

不,不可能。正如@Jon 所说,没有其他选项可以强制INT字段保留VARCHAR数据。

于 2012-08-16T12:51:05.960 回答
0

不,没有这样的选择。

您可能应该使用一VARCHAR列作为订单号,并使用单独的列(可能INT)仅用于排序;在插入和更新行时,根据订单号填充辅助列。

于 2012-08-16T11:35:03.410 回答
0

尝试使用这种方式(number_string * 1)将字符串转换为数字,例如 -

SELECT * FROM table ORDER BY column * 1;
于 2012-08-16T12:30:26.543 回答