我有一个名为 source_recid 的文本字段。它像字符串一样存储一半字符串一半数字。
示例
shop.orders.32442
语法是DATABASENAME.TABLENAME.RECID
我的目标是扫描这个列并找出其中最大的 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
有没有办法在不执行此步骤的情况下完成此任务?
最佳答案
首先,除非您的所有 RECID 永远且始终恰好是五个字符长,否则您所做的选择将不起作用,因为“shop.order.9”会比“shop.order.9”大。 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”,并按其排序。
我希望这会有所帮助。
关于mysql - sql查询有助于对同时包含字符串和数字的字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11749709/