如果您按始终设置的第一个字段排序,则可以尝试提取该字段:
ORDER BY SUBSTRING_INDEX(date_of, ',', 1);
实际上,您可以 order by date_of
,因为字典顺序得到维护。如果你想按最后一个子字段排序,你会遇到麻烦,但既然你想要第一个......
现在“如果日期的第一个元素已经过去”有点棘手。
ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE ... END
可能是一个开始,但是如果没有第二个子字段呢?如果我们迭代 SUBSTRING_INDEX,我们会再次获得第一个字段。
您将不得不迭代CASE
自身。不寒而栗
ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1)
ELSE 999999999
END
END
END
我可以看到这种结构没有出色的表现。我强烈建议将三个日期放在三个不同的列中,或者重新设计模型以将日期放在单独的表中。