首页 > 解决方案 > PostgreSQL:是否可以对字符串中具有日期时间的部分进行排序

问题描述

我有包含数据序列和日期时间类型的列的名称,如下所示:

DATA01_0003_20210126135705.zip
DATA01_0002_20210127135030.zip
DATA01_0004_20210126142913.zip

我要根据datetime ORDER BY,然后是sequence string,可以吗?

DATA01_0002_20210127135030.zip
DATA01_0004_20210126142913.zip
DATA01_0003_20210126135705.zip

我尝试了如下语句,但它在日期时间之前按顺序排序:
SELECT filename FROM tblData ORDER BY filename

DATA01_0002_20210127135030.zip
DATA01_0003_20210126135705.zip
DATA01_0004_20210126142913.zip

SELECT filename FROM tblData ORDER BY filename DESC

DATA01_0004_20210126142913.zip
DATA01_0003_20210126135705.zip
DATA01_0002_20210127135030.zip

标签: postgresqlsorting

解决方案


在 postgresql 中,您可以按表达式排序。

要按文件的时间戳排序,有必要从字符串中提取它。根据您的示例,我猜测最后一个文本之后的文本_将包含日期。如果该假设成立,那么以下将按日期排序

SELECT filename from tbldata
order by reverse(split_part(reverse(filename), '_', 1))

如果数量_是固定的,那么两个reverses 的技巧就没有必要了。你可以改为order by split_part(filename, '_', 3)


推荐阅读