我有一张人的桌子,我想在下一个即将到来的生日(无视年份)订购它们。 我使用了这个答案中描述的方法:
https://stackoverflow.com/a/20522025/2934340
OR
SQL代码:
SELECT *
FROM _table
ORDER BY SUBSTR(DATE('NOW'), 6)>SUBSTR(birthdate, 6), SUBSTR(birthdate, 6);
问题是我使用其他日期格式。在上面的答案中,日期格式是mm-dd,我想使用dd-mm。现在我的日期是这样的:
17-10-1974
03-10-1979
29-02-1980
20-10-1993
我希望它像这样排序:
17-10-1974
20-10-1993
29-02-1980
03-10-1979 (Because we are at 10-10-2014/past this date)
我可以对代码做些什么更改呢?
答案 0 :(得分:1)
存档这个的简单方法是使用SUBSTR()函数切换月和日:
SELECT *
FROM _table
ORDER BY SUBSTR(DATE('NOW'), 6)>(SUBSTR(birthdate, 4, 3) || SUBSTR (birthdate, 1, 2)), (SUBSTR(birthdate, 4, 3) || SUBSTR (birthdate, 1, 2));
答案 1 :(得分:0)
我能想到的快速解决方案如下:
SELECT *
FROM (SELECT *
FROM _table
WHERE ( Substr(birthdate, 4, 2) = Substr(Date('now'), 6, 2)
AND Substr(birthdate, 1, 2) > Substr(Date('now'), 9, 2) )
OR ( Substr(birthdate, 4, 2) != Substr(Date('now'), 6, 2) )
ORDER BY Substr(birthdate, 4, 2),
Substr(birthdate, 1, 2))
UNION ALL
SELECT *
FROM (SELECT *
FROM _table
WHERE Substr(birthdate, 4, 2) = Substr(Date('now'), 6, 2)
AND Substr(birthdate, 1, 2) < Substr(Date('now'), 9, 2)
ORDER BY Substr(birthdate, 1, 2));
让我们假设今天是21-02,第一个声明将返回从22-02到31-01的所有生日。然后第二个语句将返回从01-02到20-02的生日。 Date('now')
表示为YYYY-MM-DD,这就是为什么我们将Substr(birthdate,4,2)
与Substr(Date('now',6,2)
进行比较的原因。
我们必须在其他select语句中包含select语句,否则我们必须将ORDER BY放在整个语句的末尾,这当然是你不想要的。