我有两张表,我使用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命令下面)。任何人都可以解释为什么会发生这种情况或建议解决我的问题吗?
提前致谢!
答案 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