0

我有一个名为 source_recid 的文本字段。它在其中存储半串半数之类的字符串。

例子

shop.orders.32442

语法是DATABASENAME.TABLENAME.RECID

我的目标是扫描这个 col 并找出其中最大的 RECID(整数)。

所以,在这样的情况下

shop.orders.32442
shop.orders.82000
shop.orders.34452

这将是 source_recid 为 的记录shop.orders.82000。为什么?因为82000恰好是最大的整数。

什么 SQL 语句可以让我获得该记录?

一种选择是创建一个新列( the_ids )并移动其中的所有整数,然后运行类似这样的操作

select source_recid from mytable 
  where source_recid like 'shop.orders.%' 
    order by the_ids DESC 
     LIMIT 1

有没有办法在不通过这一步的情况下实现这一目标?

4

2 回答 2

1
SELECT CAST(SUBSTRING_INDEX(field,'.',-1) AS INT) AS RID
FROM yourtable
WHERE
RECID LIKE 'shop.order.%'
ORDER BY
RID DESC
于 2012-07-31T22:26:19.567 回答
1

首先,除非您所有的 RECID 永远都是五个字符,否则您提出的选择将不起作用,因为“shop.order.9”会比“shop.order.10”大,这是错误的。

我认为我们需要在这里做的是提取数字部分,将其转换为整数,然后按此排序。现在,我无权访问 mySQL,所以这可能不完全正确,但应该很接近......

SELECT
    CAST(SUBSTRING_INDEX(RECID,'.',-1) AS INT) AS RecIdNumber
FROM
    table
WHERE
    RECID LIKE 'shop.order.%'
ORDER BY
    RecIdNumber DESC
LIMIT
    0, 1

这将占用最后一个点之后的部分,将其转换为 INT,将其命名为“RecIdNumber”,然后按此排序。

我希望这有帮助。

于 2012-07-31T22:14:53.860 回答