mysql - sql查询有助于对同时包含字符串和数字的字段进行排序

标签 mysql sql

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

相关文章:

sql - 可能加快这个查询?

php - 使用 php 和 mysql 在数据库中查找匹配项

mysql - WebSQL 中表与其自身的一对多关系

mysql - SQL中没有公共(public)字段的两个表如何合并数据?

SQL - ROW_NUMBER () OVER (ORDER BY) 不起作用

显示多个条目及其计数的 SQL 查询

mysql - 如何选择多个 GROUP BY 行的 SUM?

java - 为什么这个MySQL不能正确执行?

mysql - 更新 mysql 中的表后触发错误 1054

c# - 查询时防止丢失 [MEMNO] 值中的前导零?