sql - 按未格式化日期 sqlite 排序

标签 sql sqlite date format

我将日期作为字符串存储在数据库中,格式为 DD-MM-YYYY。

当我尝试在日期列上使用 orderby 进行选择查询时。我没有得到预期的结果。

结果示例: 28/02/2013 27/02/2013 2013 年 1 月 3 日

我的sql查询:

SELECT * FROM data ORDER BY strftime('%s', date_column)

谢谢。

最佳答案

问题是您将日期存储为 DD-MM-YYYY 字符串,这不仅会阻止日期作为字符串的自然排序,还会使用 SQLite's date and time functions 解析它们。 .单击链接并向下滚动到“时间字符串”部分。

SQLite 期望日期/时间字符串按自然顺序排列,从最高有效位到最低有效位,即 YYYY-MM-DD。您可以使用字符串操作将 DD-MM-YYYY 字符串转换为该形式。例如:

select 
  substr(reversed_date, 7,4) || '-' || 
  substr(reversed_date, 4, 2)|| '-' ||
  substr(reversed_date, 1, 2) as proper_date
  from (
    select '12-03-2000' as reversed_date
  )
;

您可以将日期列转换为这种格式(如@peterm 建议的那样),或者只使用 proper_date 的值进行排序。您不需要为此使用 strftime,但与日期相关的函数将使用这些值。

关于sql - 按未格式化日期 sqlite 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234150/

相关文章:

mysql - 我如何合并带有时间戳的行并受 id 限制并循环它?

sql - 为什么 'IS NULL' 在 blob 列上比 'length() = 0' 慢 100 倍?

php - 将 'yyyy-mm-dd hh:ii:ss' 格式的日期替换为 'yyyy-mm-05 hh:ii:ss' 的最短方法?

ruby - 在 Ruby 中将字符串解析为日期

java - 在可扩展 ListView 中使用 SimpleCursorTreeAdapter 时获取光标值

javascript - 深入理解 : How code structure affects the content of date arrays created with loops

java - 检查数据库中存在的大量字符串的有效方法

c# - 从数据库字段返回前 100 个字母?

MySQL内部连接多列

objective-c - 使用 sqlite3 进行类型转换