我有包含数据序列和日期时间类型的列的名称,如下所示:
<块引用>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
答案 0 :(得分:2)
在 postgresql 中,您可以按表达式排序。
要按文件的时间戳排序,必须从字符串中提取它。根据您的示例,我将猜测最后一个 _
之后的文本将具有日期。如果该假设成立,则以下内容将按日期排序
SELECT filename from tbldata
order by reverse(split_part(reverse(filename), '_', 1))
如果 _
的数量是固定的,那么带有两个 reverse
的技巧就没有必要了。你可以改为order by split_part(filename, '_', 3)