Mysql Order By for字符串

问题描述:

我正在使用下面的寻址方法来处理我的仓库。Mysql Order By for字符串

1-3-5 
2-4-1 
12-1-2 

现在我想用排序对它们进行排序,但问题是12-1-2之前2-4-1

虽然我需要一个像进行排序来下面

1-3-5 
2-4-1 
12-1-2 
19-3-5 
23-3-2 

其实每个地址包含3个不同的信息:

Shelve-floor-bin 

所以我需要搁置先进行排序,然后再楼斌。

+1

为什么这是一个问题? – Strawberry

+0

它看起来像你希望你的值'p-q-r'排序,就好像'p','q'和'r'是每个数值,而不是词汇值。换句话说,你需要'1-2-3'来到'1-10-3'之前。那是对的吗?请考虑您的问题的[编辑]以澄清您的要求。 –

+0

您的评论是完全正确的,编辑我的问题 – user8542794

可能这是行得通的。

SELECT * FROM `tablename` ORDER By convert(`fieldtosory`, decimal) ASC 
+0

此解决方案仅适用于第一部分,我的意思是正确排序1-xx,2-xx,12-xx,22-xx,但它不适用于第二部分,我意思是1-5-x在1-3-x之前 – user8542794

SELECT '2-1' x UNION SELECT '12-1' ORDER BY x; 
+------+ 
| x | 
+------+ 
| 12-1 | 
| 2-1 | 
+------+ 

SELECT '2-1' x UNION SELECT '12-1' ORDER BY x+0; 
+------+ 
| x | 
+------+ 
| 2-1 | 
| 12-1 | 
+------+ 

你忽略了first rule of relational database design。解决方案是在表中的三个属性之间分割标识符。其他任何事情都是解决方法。

假设有一些合理的原因是不可能的,那么比已经建议的解决方法更好的解决方法是按我描述的方式更改表格,但重命名它,然后创建一个视图,并连接使用原始表名的三个属性。但是这会破坏试图写入视图属性的朴素代码。