2012-08-16 57 views
1

我有一个字段“order_number”的数据库设置为INT在奇数场合的订单号将需要有一个尾随r例如2100r明显INT只会接受数字,并将数字排序正确的ASC或DESC如果我使用VARCHAR来克服这个限制,它将正确接受尾随r字符,但不会按数字顺序正确排序数字,有没有办法可以强制INT选项接受一个字符?Mysql INT与一个字符

回答

0

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

SELECT CAST(int_col AS CHAR); 

SELECT CAST(char_col AS unsigned INTEGER); 
0

不,没有这样的选择。

您应该可能使用VARCHAR列的订单号和一个单独的列(可能INT)只用于排序;根据插入和更新行时的顺序号填充帮助程序列。

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 
0

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

SELECT * FROM table ORDER BY column * 1; 
0

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