postgresql - 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
解决方案
在 postgresql 中,您可以按表达式排序。
要按文件的时间戳排序,有必要从字符串中提取它。根据您的示例,我猜测最后一个文本之后的文本_
将包含日期。如果该假设成立,那么以下将按日期排序
SELECT filename from tbldata
order by reverse(split_part(reverse(filename), '_', 1))
如果数量_
是固定的,那么两个reverse
s 的技巧就没有必要了。你可以改为order by split_part(filename, '_', 3)
推荐阅读
- java - 我怎样才能使它读取超过 255 个 Unicode 字符的 InputStream 子类读取这些字符并创建一个字节数组而不会溢出?
- c - C 中的 TCP 回显服务器/客户端,recv_all,send_all - 由我实现,recv 不起作用
- github - Github:页面构建超时
- php - 在sql中获取交叉引用并在php中显示
- c - 在 C 中处理 2 个静态二维数组的正确方法是什么?
- python-3.7 - 如何使用多重继承获取一些父类属性值
- javascript - 制作多查找器字典的问题
- javascript - AppScript Google Sheets:将结帐表中的序列号匹配到主表,然后更新主表中的单元格
- c++ - SGVector 超出范围时 Shogun 工具箱错误释放内存
- java - JPA 标准按相关实体过滤,无需连接