从SQLite中的错误字符串字段按日期排序?

时间:2015-01-29 19:58:20

标签: sqlite sorting date

我在使用离子开发的应用程序中使用SQLite数据库,但不幸的是数据库的构建方式使得日期字段是字符串,而不是正确的日期类型值。 (我不是负责构建此数据库的人,也不能要求他们解决此问题)。它们都遵循"DD-Mon"格式。

所以结构如下

id  |date    | (other columns...) 
1   |"25-Jan"|
2   |"25-Jan"|
3   |"30-Jan"|
4   |"30-Jan"|
5   |"31-Jan"|
6   |"31-Jan"|
7   |"31-Jan"|
8   |"31-Jan"|
#   (500 more rows like this)

问题是我想使用的查询只能获取某一天的日期(类似SELECT * FROM table WHERE /*(date after X)*/;

有一件事需要注意,尽管我仍然无法想到解决方案,但是ID从早到晚都是有用的,所以如果给定的ID大于id Y,那么日期X出现在日期Y之后。

1 个答案:

答案 0 :(得分:0)

SQLite在SQL意义上没有强大的数据输入。

sqlite> create table test (dt date not null);
sqlite> insert into test values ('wibble');
sqlite> select * from test;
wibble

在你的情况下,如果你知道这一年,你可以

  • 使用正确的结构创建一个新表
  • 插入更正后的数据,
  • 验证,
  • 放下旧桌子,
  • 重命名新表。

外键可以使这更麻烦,但它仍然非常简单。

创建新表格

使用您喜欢的任何方法。例如,您可以从.schema old-table-name开始,并为其指定一个新的表名。

插入已更正的数据并进行验证

insert into new-table-name (id, date, other-columns)
select id, 
    '2015' || '-' ||
    case substr(dt, -3) 
    when 'Jan' then '01' 
    when 'Feb' then '02'
    when 'Mar' then '03'
    when 'Apr' then '04'
    when 'May' then '05'
    when 'Jun' then '06'
    when 'Jul' then '07'
    when 'Aug' then '08'
    when 'Sep' then '09'
    when 'Oct' then '10'
    when 'Nov' then '11'
    when 'Dec' then '12'
    end || '-' ||
    substr(dt, 1, 2) as date,
    ... -- other columns
from old-table-name;

删除旧表

drop table old-table-name;

重命名新表

alter table new-table-name rename to old-table-name;