我有一个名为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
有没有办法在不经过这一步的情况下解决这个问题?
答案 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