sql查询帮助排序一个既有字符串又有数字的字段

时间:2012-07-31 22:06:05

标签: mysql sql

我有一个名为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

有没有办法在不经过这一步的情况下解决这个问题?

2 个答案:

答案 0 :(得分: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',并按此排序。

我希望这会有所帮助。

答案 1 :(得分:1)

SELECT CAST(SUBSTRING_INDEX(field,'.',-1) AS INT) AS RID
FROM yourtable
WHERE
RECID LIKE 'shop.order.%'
ORDER BY
RID DESC