我有一个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。
任何人都可以帮助我。
答案 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'