我有mysql表,其字段为product_name,其数据类似于
SKL-05
TIP-01
TIP-02 L/R
TIP-12 UV
TIP-120 L/R
TIP-121 L/R
TIP-13 L/R
我想按照
排序结果SKL-05
TIP-01
TIP-02 L/R
TIP-12 UV
TIP-13 L/R
TIP-120 L/R
TIP-121 L/R
表示字符串01,02,03等中的数字 请帮帮我们......
先谢谢!!
答案 0 :(得分:2)
SELECT product_name FROM table1
ORDER BY substring(product_name FROM 5)
http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_substring
这会杀死你在product_name上的任何索引,但是如果你需要速度,请添加一个额外的字段numeric_product_name
,并附上索引。
答案 1 :(得分:0)
您可以尝试使用MySQL的SUBSTRING()
和SUBSTRING_INDEX()
功能: String functions
尝试:
ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING(product_name,5),' ',1) AS INT)
或
ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(product_name,' ',1),'-',-1) AS INT)
答案 2 :(得分:0)
有几种选择:
重新格式化代码以允许自然订购,例如
TIP-121 L/R --> TIP-121 L/R
TIP-13 L/R --> TIP-013 L/R
将字符串拆分为其各个部分并单独订购。如果有很多部件,这可能会有点可怕。例如
SELECT code
FROM table
ORDER BY
SUBSTR(code, 1, 4),
CAST(SUBSTR(code, 5, LOCATE(' ', code)) AS UNSIGNED)