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

如何在SQLite中按DateTime列从近到远排序(Python环境)

SQLite无DateTime类型时按日期远近排序的解决方案

SQLite本身没有原生DateTime类型,通常用TEXT、INTEGER或REAL类型存储日期,以下是两种可靠的实现按当前日期由近到远排序的方法:

方案1:用TEXT类型存储ISO8601格式日期

将日期存为YYYY-MM-DD HH:MM:SS格式的字符串(比如2024-05-20 14:30:00),SQLite的内置日期函数可以直接识别这种格式。查询时通过计算日期与当前时间的差值绝对值排序:

SELECT * 
FROM your_table 
ORDER BY ABS(JULIANDAY(datetime_column) - JULIANDAY('now')) ASC;
  • JULIANDAY()函数会把日期转换为儒略日数值,计算差值的绝对值后按升序排列,就能实现从最近到最远的排序。
  • 如果你的日期只精确到天(比如2024-05-20),直接用DATE()函数替换JULIANDAY()也可以:
    SELECT * 
    FROM your_table 
    ORDER BY ABS(JULIANDAY(DATE(datetime_column)) - JULIANDAY(DATE('now'))) ASC;
    

方案2:用INTEGER类型存储Unix时间戳

将日期转换为Unix时间戳(从1970-01-01 00:00:00 UTC开始的秒数,比如1716205800)存储,查询时计算当前时间戳与记录时间戳的差值绝对值排序:

SELECT * 
FROM your_table 
ORDER BY ABS(datetime_column - strftime('%s', 'now')) ASC;
  • strftime('%s', 'now')会获取当前时间的Unix秒数,差值绝对值升序就是按日期由近到远排列。
  • 如果你存的是毫秒级时间戳,记得把当前时间也转成毫秒:
    SELECT * 
    FROM your_table 
    ORDER BY ABS(datetime_column - strftime('%s%f', 'now') / 1000) ASC;
    

针对已有非标准格式日期的补救方法

如果之前已经存了非ISO8601格式的日期(比如2024/05/20或05-20-2024),可以先用STRFTIME转换为标准格式再计算:

SELECT * 
FROM your_table 
ORDER BY ABS(JULIANDAY(STRFTIME('%Y-%m-%d', datetime_column, 'replace', '/', '-')) - JULIANDAY('now')) ASC;

上面的语句会把日期中的/替换为-,转换为标准格式后再计算差值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:45:26