Table :
Value:
gte
2016-06-07
aze
2015-07-08
(...)
重要: 值存储Varchar(因为它可以是字符串,数字,日期等...)
我需要“排序”看起来像日期的值 我想象的东西是什么?
ORDER BY (value LIKE "%Y-%m-%d") DESC
答案 0 :(得分:0)
如果日期格式为您描述为 YYYY-MM-DD ,则只需删除 - 分隔符即可。然后它可以按字母顺序排序为数字顺序。
尝试类似
的内容SELECT *
FROM Table
ORDER BY REPLACE(Value,'-','') DESC
答案 1 :(得分:0)
如果您尝试将其转换为日期,则其他无日期值将为null
示例
mysql> mysql> select STR_TO_DATE('5/15/2012 8:06:26 AM','%c/%e/%Y %r');
+---------------------------------------------------+
| STR_TO_DATE('5/15/2012 8:06:26 AM','%c/%e/%Y %r') |
+---------------------------------------------------+
| 2012-05-15 08:06:26 |
+---------------------------------------------------+
1 row in set (0.00 sec)
mysql> select STR_TO_DATE('dfsddfs','%c/%e/%Y %r');
+--------------------------------------+
| STR_TO_DATE('dfsddfs','%c/%e/%Y %r') |
+--------------------------------------+
| NULL |
+--------------------------------------+
1 row in set, 1 warning (0.00 sec)
第一次尝试将其转换为日期并获得非空结果和使用ORDER BY的排序
SELECT * FROM (SELECT STR_TO_DATE(value, "%Y-%e-%c") AS DT FROM TABLE) T WHERE T.DT IS NOT NULL ORDER BY DT;
答案 2 :(得分:0)
这应该通过将所有“看日期”值放在顶部来订购记录集。它在“LIKE”子句中使用RegEx模式:
SELECT * FROM (
SELECT VALUE,
case when VALUE LIKE '[0-9]{4}-[0-9]{2}-[0-9]{2}' then 1 else 0 END AS LOOKS_LIKE_DATE
FROM TABLE
) ORDER BY LOOKS_LIKE_DATE DESC