我想按日期订购.
例如
table_date
February 2011
January 2011
December 2010
Run Code Online (Sandbox Code Playgroud)
我已经尝试过了:
SELECT distinct(table_date) FROM tables ORDER BY table_date DESC
Run Code Online (Sandbox Code Playgroud)
bur它不起作用.
我得到了这个:
January 2011
February 2011
December 2010
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
Tom*_*mas 11
如果您必须将日期存储在varchar其他人不指出的日期中,您可以使用:
SELECT table_date FROM tables ORDER BY STR_TO_DATE(table_date, '%M %Y') DESC;
Run Code Online (Sandbox Code Playgroud)
如果您想按日期订购,请将其存储为日期,而不是字符串.除非您的日期字符串是表单yyyy-mm-dd,否则它不会按您的意愿排序.
数据库很难按原样工作,没有人让它变得更难,你应该尽可能地努力避免我喜欢称之为SQL体操的东西.
将其存储为日期,如果必须,请使用日期函数将其添加到表单中February 2011.
这样做比你想要做的容易得多.
即使由于代码限制而无法更改任何当前列,也可以始终向数据库添加另一列,TABLE_DATE_AS_DATE并插入插入/更新触发器以根据其填充它TABLE-DATE.
然后就做:
update table x set table_date = table_date
Run Code Online (Sandbox Code Playgroud)
或类似的东西,触发所有行的触发器.
然后,您的查询仍然可以进入,table_date但table_date_as_date用于订购.这当然是一个障碍,但我过去必须使用这样的技巧,因为代码无法改变,所以我们不得不诉诸DBMS技巧.
日期应存储为日期而不是 VARCHAR.
假设你有table_date以下格式(DD-MM-YYYY)
table_date
2011-01-01
2011-02-01
2010-12-01
Run Code Online (Sandbox Code Playgroud)
现在您可以通过以下方式执行 order by 子句
SELECT * FROM table_order ORDER BY str_to_date(date, "%Y-%M-%D") ASC
Run Code Online (Sandbox Code Playgroud)
我怀疑输出是否是有序的
| 归档时间: |
|
| 查看次数: |
16354 次 |
| 最近记录: |