SQL在varchar中按日期选择顺序

时间:2014-10-22 08:07:51

标签: mysql sql

我在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错误,我不明白为什么。

这里有人能以正确的方式向我展示吗?

3 个答案:

答案 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永远不是一个好主意。其他任何事情只是一种解决方法,而不是解决方案。