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

如何在SQLite中按年份而非日期对查询结果排序?

按年份排序SQLite数据的解决方案

嘿,我来帮你搞定这个问题~ 你现在遇到的情况是,geboortedatum字段是以**字符串格式(DD-MM-YYYY)**存储的,直接用order by geboortedatum会按照字符串的字符顺序排序,而不是我们想要的年份顺序。下面给你两种靠谱的解决方法:

方法1:直接提取年份字符串排序

因为你的日期格式是DD-MM-YYYY,年份正好是字符串的最后4位,我们可以用SUBSTR()函数提取这部分,然后按它排序:

select naam, achternaam, geboortedatum 
from persoon 
order by SUBSTR(geboortedatum, 7, 4) asc; -- asc是升序,换成desc就是降序

这个方法简单直接,四位年份的字符串比较和数值比较结果一致,完全能满足按年份排序的需求。

方法2:转换为日期类型后按年份排序

如果想要更严谨(比如未来字段格式可能变化),可以先把字符串转换成SQLite能识别的日期格式,再提取年份排序:

select naam, achternaam, geboortedatum 
from persoon 
order by STRFTIME('%Y', DATE(substr(geboortedatum,7,4)||'-'||substr(geboortedatum,4,2)||'-'||substr(geboortedatum,1,2))) asc;

这里我们先把DD-MM-YYYY重组为SQLite默认的YYYY-MM-DD格式,用DATE()函数解析成标准日期,再用STRFTIME('%Y', ...)提取年份进行排序,兼容性更强。

执行后的预期结果

两种方法都会得到按年份升序排列的结果:

  • Jan Jenting 14-03-1988
  • Piet Jurring 06-03-1992
  • Henk Geritssen 28-01-1993
  • Annemijn Van groenen 24-07-1998
  • Lisa Petersen 17-05-2000
  • Linda Platvoet 10-11-2001

内容的提问来源于stack exchange,提问作者Lars Berger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:42:32