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