在Mysql中查找Max in String值

时间:2015-02-24 11:34:37

标签: mysql casting max

我有一个mysql表,其中包含id,Name,File path,created_by,created_on等字段。

在表格中,我必须按id找到max(file_path)组。

例如,我将file_path作为

TTE_RODRIGUEZ_100001_246_6.pdf,
TTE_RODRIGUEZ_100001_246_7.pdf,
TTE_RODRIGUEZ_100001_246_8.pdf,
TTE_RODRIGUEZ_100001_246_9.pdf,
TTE_RODRIGUEZ_100001_246_10.pdf

id为1。

如果我运行查询

select max(file_path) from table where id='1'

它将值显示为TTE_RODRIGUEZ_100001_246_9.pdf而不是TTE_RODRIGUEZ_100001_246_10.pdf,因为它将其作为字符串进行比较。

我试过了

SELECT CAST(SUBSTRING_INDEX(file_path, '_', -3)  AS SIGNED) as num FROM `table`

但结果显示为0。

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

假设文件路径的第一部分对于给定的id是相同的,您希望以正确的顺序获取内容。

select file_path
from table
where id = '1'
order by (substring_index(file_path, '_', -1) + 0) desc
limit 1;

请注意,substring_index()表达式使用-3,而使用-1。在第一个示例中,substring_index()将返回“1.pdf”。 + 0进行静默转换,因此它将转换前导数字而不返回错误 - 在这种情况下给出“1”。

答案 1 :(得分:0)

您只能使用substring()

选择渐进式数字
SUBSTRING('TTE_RODRIGUEZ_100001_246_10.pdf', 25, 2) --10

您应该重命名文件,添加零,如07,08等。

查询将是

SELECT MAX(SUBSTRING(file_path, 26, 2))
FROM table
WHERE id = '1'

编辑: 鉴于文件名可能会发生变化,唯一确定的是它以 .pdf 结尾,你必须使用这样的负数:

SELECT MAX(SUBSTRING(file_path, -5, 2))
FROM table
WHERE id = '1'