PostgreSQL:是否可以对字符串的部分进行排序,日期时间

时间:2021-01-27 05:56:10

标签: postgresql sorting

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

<块引用>

DATA01_0003_20210126135705.zip
DATA01_0002_20210127135030.zip
DATA01_0004_20210126142913.zip

我要按日期时间ORDER BY,然后是序列字符串,可以吗?

<块引用>

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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