【问题标题】:Sort Table that primary key start with letter and get last record主键以字母开头并获取最后一条记录的排序表
【发布时间】:2020-03-06 05:22:06
【问题描述】:

这是我的桌子

+---------+-----------+
| Item_No | Item_name |
+---------+-----------+
|  IL1    |  abc_1    |
|  IL2    |  abc_2    |
|  IL3    |  abc_3    |
|  IL4    |  abc_4    |
|  IL5    |  abc_5    |
|  IL6    |  abc_6    |
|  IL7    |  abc_7    |
|  IL8    |  abc_8    |
|  IL9    |  abc_9    |
|  IL10   |  abc_10   |
|  IL11   |  abc_11   | 
+---------+-----------+

我想按主键排序我的表我试试这个 SQL

SELECT * 
FROM `item_master` 
WHERE Item_No LIKE 'IL%' 
ORDER by I_code DESC LIMIT 1


但我给了我 IL9 作为最后一个

【问题讨论】:

  • 嗨,正如你所说,I_Code 不是你的领域。它应该是 Item_No。
  • 什么mysql版本?
  • 我建议在I_code 构建期间使用零填充自动增量。
  • 会有IL3T这样的值吗?或IL3T1?
  • 我非常想使用代理 id 作为主键

标签: mysql database select sql-order-by where-clause


【解决方案1】:

例如,您可以从“Item_No”(I_code?) 中提取数字并将其转换为 int:

SELECT * 
FROM item_master 
WHERE Item_No LIKE 'IL%' 
ORDER by cast(substring(Item_No, 3) as UNSIGNED) DESC LIMIT 1

【讨论】:

    【解决方案2】:

    您在这里面临的问题是我假设VARCHAR 的排序错误,这是一个字符串,它按词法排序,这是一种解决方法:

    SELECT * 
    FROM item_master 
    ORDER by right(concat('0000', Item_No), 4) DESC LIMIT 1
    

    注意0000(4 个零)和right() 函数的第二个参数4 是排序字段的字符长度

    另一种解决方法是使用LPAD

    SELECT * 
    FROM item_master 
    ORDER by lpad(Item_No, 100, '0') DESC LIMIT 1
    

    这是一个有效的sqlfiddle 来检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多