从数据库中检索日期

时间:2014-08-25 16:56:46

标签: php mysql sql date

我的数据库中有一个release_date行 现在我也希望在最上面显示最新日期

我现在的查询:$sql = "SELECT * FROM games ORDER BY release_date ASC";

但是这个ORDER BY只是获得日期的第一个数字(日) 现在我明白了:

03-11-2014 12-11-2013 14-07-2011 16-03-2012

需要:

03-11-2014 12-11-2013 16-03-2012 14-07-2011

3 个答案:

答案 0 :(得分:1)

使用STR_TO_DATE将日期字符串转换为实际日期。

SELECT * FROM games 
ORDER BY STR_TO_DATE(release_date, '%d-%m-%Y') DESC

您也可以使用此功能将日期重新格式化为默认格式,然后将列数据类型更改为date

答案 1 :(得分:0)

上述答案给出的解决方案适用于您的情况。

但是,最好的办法是将列类型更改为datetime,而不是通过调用函数将str转换为查询中的datetime,因为您必须修改所有使用'release_date'字段的查询

如果您更改数据类型,则表明您正在采取正确的方式。

答案 2 :(得分:0)

如果您将日期类型存储为日期字段,最好将其存储为类似varchar的字符串,您可以在运行查询时将字符串值更改为日期对象,但是您不能通过应用某些日期函数来使用任何索引我建议你改变你的架构并将日期字段的类型更改为下面的实际日期是你可以改变它的步骤

步骤1添加新列作为release_date的副本

ALTER TABLE t ADD COLUMN `release_date_copy` DATE NULL AFTER `release_date`; 

步骤2保存您的日期字符串,将其作为实际日期转换为新列,即release_date_copy

update t
set release_date_copy =  STR_TO_DATE(release_date, '%d-%m-%Y'),
release_date = null;

步骤3将release_date列的类型更改为日期

ALTER  table t CHANGE `release_date` `release_date` DATE NULL; 

步骤4将数据从release_date_copy复制到您的真实列release_date

update t
set release_date =  release_date_copy;

步骤5删除列的副本

ALTER TABLE t DROP COLUMN `release_date_copy`; 

现在您可以简单地以降序方式查询它,也可以使用索引

select * from t
order by release_date desc

Demo