使用MAX时检查最高数据文件名时出错

时间:2017-12-02 12:34:13

标签: sql database database-administration

我希望获得数据文件中存在的最高文件名。 查询:     select max(file_name) from dba_data_files where tablespace_name='XYZ';

以上查询仅检测数据文件是否来自 ABC [0-9]的.dbf。 查询没有显示文件abc10.dbf,即使它存在。 它显示了abc9.dbf。 有没有其他方法来获取数据文件的最高文件名?

分析了一段时间后。 我在查询中通过file_name发出命令。 这是输出。

/.../data01/odam1.dbf
/.../data01/odam10.dbf
/.../data01/odam2.dbf
....................
/../data01/odam9.dbf

也许max函数检测到最后一个文件名,这就是为什么odam9.dbf显示为输出而不是odam10.dbf。

1 个答案:

答案 0 :(得分:0)

对于您显示的文件名,您可以按长度和名称订购:

select file_name
from dba_data_files
where tablespace_name = 'XYZ'
order by len(filename) desc, file_name desc
fetch first 1 row only;

注意:长度函数可能是length(),具体取决于数据库。有些数据库将fetch first 1 row only拼写为limit甚至select top

此外,这是一个很大的假设,即文件名都具有相同的结构,只是末尾的数字不同(如问题中的示例所示)。