我在varchar列的数据库中有我的日期,我无法更改它。但是我想要从最新到最新排序。我在数据库中的日期如下:
2014-09-22 10:28:28
所以我尝试的是:
$sql = "SELECT * FROM axnmrs_cases WHERE vin = :vin ORDER BY STR_TO_DATE(date_created,'%b-%e-%Y') ASC LIMIT 30";
但不幸的是,这对我没有任何改变,即使我将ASC改为DESC,结果也没有改变
还有类似的东西:
$sql = "SELECT * FROM axnmrs_cases WHERE vin = :vin ORDER BY CONVERT(date_created, date, 103)";
抛出语法SQL错误,我不明白为什么。
这里有人能以正确的方式向我展示吗?
答案 0 :(得分:1)
存储在varchar中的日期不是真实日期,因此订单也不能满足您的需求。最好的方法是存储日期始终在mysql本机数据类型中。但是在您的情况下,您可以使用str_to_date()
函数将varchar日期转换为实际日期,然后将其用于排序某些内容
order by str_to_date(date_created,'%Y-%m-%d %H:%i:%s');
答案 1 :(得分:0)
$sql = "SELECT * FROM `axnmrs_cases` WHERE `vin` = ':vin' ORDER BY `date_created` ASC LIMIT 30";
已经尝试过类似的东西吗?
答案 2 :(得分:0)
如果日期格式为:
,则STR_TO_DATE
函数使用的格式错误
2014-09-22 10:28:28
然后你需要使用
STR_TO_DATE(date_created, '%Y-%m-%d %H:%i:%s')
即。您提供的格式应与varchar所在的格式相匹配。
<强> Example on SQL Fiddle 强>
如果您使用'%b-%e-%Y'
,那么您正在寻找类似Jan-1-2014
的日期,有关格式定义的完整列表,请参阅My SQL Docs for DATE_FORMAT
此外,CONVERT(date_created, date, 103)
不起作用,因为它是SQL Server语法。
最后,我真的会真的尝试更改列数据类型。将日期存储为varchar永远不是一个好主意。其他任何事情只是一种解决方法,而不是解决方案。