【问题标题】:Sort Data Column to Retrieve Max textual value排序数据列以检索最大文本值
【发布时间】:2012-10-08 02:13:11
【问题描述】:

我有一列称为订单号 (orderNum) 的数据,可以是以下任何内容:

1124, 203, 5467, MANUAL1, MANUAL34, DEMO12, DEMO998, INTERNAL2312, INTERNAL232

本质上,我需要编写一个 SQL 查询来检索某种类型的“最大”订单号。整数的实际顺序是微不足道的,但是 MySQL 对VARCHARs 进行的排序有点古怪。所以在上面的数据集中,如果我正在寻找下一个手动订单号,我需要能够知道 MANUAL34 是最后使用的手动订单号,INTERNAL2312DEMO12(数字会消失依次增加 1)。有没有一种方法可以实现这一点,而不必拉出整个列并在我的 Java Web 服务中对其进行排序?

【问题讨论】:

  • 这里真正的问题是orderNum 字段结合了order 实体的两个属性:类型和编号。最好更改数据库架构以将这些属性分隔到它们自己的列中。
  • @Xint0 绝对正确,但不幸的是,该系统已经投入生产。不过还是谢谢你的建议。

标签: mysql search select


【解决方案1】:

你可以这样做:

select * from testing where value like 'MANUAL%' 
order by CAST(right(value, length(value)-length('MANUAL')) as UNSIGNED) desc 
LIMIT 1

Link to SQL Fiddle

【讨论】:

  • 哇哦,太好了。我将不得不研究您使用的那些功能(castright),因为我以前从未见过它们使用过。谢谢!
猜你喜欢
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多