You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres对日期拼接字符串的concat结果排序机制是怎样的?

PostgreSQL 字符串排序逻辑说明

你执行排序的字段a是字符串(text/character varying)类型,而非时间类型,PostgreSQL 对这类字段的排序遵循以下规则:

  • 默认按照数据库配置的排序规则(collation),从左到右逐字符对比ASCII/Unicode编码值的大小,直到出现第一个不同的字符,直接确定两个字符串的排序优先级,后续字符不再参与对比。

你的测试用例排序原因分析

你提供的三个字符串前19位均为固定格式的时间字符串YYYY-MM-DD HH:MM:SS,单独提取这部分的大小关系如下:

  1. 2021-10-18 11:12:15(对应后缀stack)
  2. 2021-10-18 12:10:09(对应后缀boy)
  3. 2021-10-18 15:12:09(对应后缀apple)

时间部分的大小关系已经完全确定了三个字符串的排序顺序,后缀apple/boy/stack在本次排序中完全没有参与对比,所以最终结果和时间升序的结果一致,和后缀的字母顺序无关。

如果需要验证后缀的排序逻辑,可以调整测试用例把三个字符串的时间部分改成完全一致,此时排序结果就会按照后缀的字母顺序排列:apple < boy < stack。如果你的业务需求是优先按照后缀排序、再按时间排序,可以使用字符串截取函数提取后缀后指定排序规则,示例:

with temp_table(a) as (
values ('2021-10-18 15:12:09apple'),
  ('2021-10-18 12:10:09boy'),
 ('2021-10-18 11:12:15stack')
) select * from temp_table order by substring(a from 20), a

内容的提问来源于stack exchange,提问作者Karanam Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:06:03