SQLite - ORDER BY strftime不工作但是ORDER BY Date是

时间:2018-01-11 16:06:00

标签: sql sqlite sql-order-by union-all strftime

我有两张表,我使用UNION ALL进行组合。然后,我想按日期订购结果表。原始表格采用DD / MM / YY格式,而不是YYYY-MM-DD expected by SQLite。这是我所拥有的代表性例子。

CREATE TABLE T1 (Name TEXT, Date TEXT);

INSERT INTO T1 VALUES
('Washington', '04-06-2017'),
('Pittsburgh', '30-06-2017');

CREATE TABLE T2 (Name TEXT, Date TEXT);

INSERT INTO T2 VALUES
('Melbourne', '04-06-2017'),
('Sydney', '30-06-2017');

CREATE TABLE T (Name TEXT, Date TEXT);

INSERT INTO T (Name, Date)
SELECT * FROM (
SELECT Name, Date FROM T1
UNION ALL
SELECT Name, Date FROM T2);

当我查询这些结果时,如果我使用:

SELECT * FROM T
ORDER BY Name asc;

排序有效。如果我使用:

SELECT * FROM T
ORDER BY Date

ORDER BY工作订单不是我想要的那个,假设YYYY-MM-DD格式的SQLite排序。所以我尝试使用strftime。但是,当我使用:

SELECT * FROM T
ORDER BY strftime('%d-%m-%Y', Date) asc;

结果表按日排序(好像格式与之前一样)和排序仅在表的各个部分内(即UNION命令和部件上方的部分)在UNION命令下面)。任何人都可以解释为什么会发生这种情况或建议解决我的问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用substr函数从Date列创建一个新的列,该列是可排序的格式,即YYYYMMDD。 : -

SELECT *, 
    substr(Date,7,4)||substr(Date,4,2)||substr(Date,1,2) AS sortabledate
    FROM T 
    ORDER BY sortabledate ASC