Mysql在字符串中查找数字并按字符串中的数字过滤结果

时间:2011-07-20 11:52:36

标签: mysql

我有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等中的数字 请帮帮我们......

先谢谢!!

3 个答案:

答案 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)

有几种选择:

  1. 重新格式化代码以允许自然订购,例如

     TIP-121 L/R     -->  TIP-121 L/R
     TIP-13 L/R      -->  TIP-013 L/R
    
  2. 将字符串拆分为其各个部分并单独订购。如果有很多部件,这可能会有点可怕。例如

    SELECT code
    FROM table
    ORDER BY 
        SUBSTR(code, 1, 4), 
        CAST(SUBSTR(code, 5, LOCATE(' ', code)) AS UNSIGNED)