ORDER BY日期DESC d-m-Y

时间:2011-12-15 10:12:04

标签: php mysql date

修改 的 日期的.csv excel文件中的格式为15-12-2011,在MySQL phpmyadmin数据库中,列类型设置为DATE,因此如果我导入文件,则date列中的所有数据都更改为0000-00-00。我做了下一个修复此问题,进入.csv文件并选择日期列并将格式更改为“非洲”,因此它将改变从d-m-Y到Y-m-d的所有内容。所以在.csv中它将成为2011-12-15而不是15-12-2011。再次导入后,日期被正确导入而不转向0000-00-00。

之后我改变了index.php中的ORDER BY:

$query = mysql_query("SELECT * FROM `newitems` ORDER BY startVisible DESC LIMIT $start, $per_page");

之后我改变了所需的格式日期。

Available from: <?php 
                        $timestamp = strtotime($query_row["startVisible"]);
                        echo date("d-m-Y", $timestamp);
                        ?>

这些脚本首先会在1。2月3日之前更改顺序,之后更改格式以便它将回显15-12-2011而不是2011-12-15(如何将其保存在数据库中)

希望这会帮助其他人解决同样的问题。

干杯。

下面=问题我问

我已经导出了一个表并修改了一些需要修改的东西。接下来,我尝试将它们再次导入到表格中,但startVisible列类型已设置为日期。我的所有日​​期都存储为0000-00-00。我在csv文件中的所有日期都是15-12-2011。我已经将列类型更改为varchar,之后我可以导入csv文件,其中包含15-12-2011我希望按照日期在www.domain.com/index.php中对所有内容进行排序。这是因为列类型未设置为DATE。所以我再次将列类型从VARCHAR更改为DATE,所有日期都更改为0000-00-00。 所以不管我做了什么,一切都改成了。我删除了所有内容并导入了相同的文件和正确导入的所有日期。所以它可能是MySQL加载失败或其他什么。

我用过:

$query = mysql_query("SELECT * FROM newItems ORDER BY startVisible DESC LIMIT $start, $per_page");

但所有日期现在都是混合的。它必须用d-m-Y来缩短它们,但不会这样做。

9-8-2011
9-3-2011
8-3-2011
7-6-2011
7-3-2011
7-11-2011
6-7-2011

现在所有内容都已正确排序但我想将其显示的顺序从2011-12-15更改为15-12-2011。 (我在网站上的意思不在MySQL中)。在index.php中,我想将所有内容显示为d-m-Y但我仍然想要正确排序(ORDER BY)它们。怎么做?

谢谢,
F4LLCON

7 个答案:

答案 0 :(得分:2)

您可以尝试MySQL功能STR_TO_DATE。这是一个示例查询。

SELECT STR_TO_DATE(dt,'%d-%m-%Y')AS fmtDate,dt FROM test.text ORDER BY fmtDate

普拉萨德。

答案 1 :(得分:1)

您的问题是该列不再是日期,因此无法将其排序为日期。您已经提到它现在是VARCHAR。因此,它将按字母顺序排序,而不是日期。

答案 2 :(得分:1)

这是因为查询现在按varchar列排序,因此按字母顺序排序,因此请尝试将其转换为日期,然后再按此命令查询:

select DATE_FORMAT(STR_TO_DATE(startVisible, '%d-%m-%Y'), '%d-%m-%Y') as startDate,... 
from newItems 
ORDER BY startDate DESC LIMIT $start, $per_page;

答案 3 :(得分:1)

该类型目前是varchar,因此它将使用文本排序。

我的建议是在日期类型表中添加一列,通过使用str-to-date()将日期字符串转换为正确的日期来填充它,然后对该列进行排序。 (要真的做d-m-y你可能必须使用

ORDER BY day(datecolumn) desc, month(datecolumn) desc, year(datecolumn) desc

但你确定你不仅仅意味着ORDER BY datecolumn DESC - 最近的第一次吗?

答案 4 :(得分:1)

您可以使用STR_TO_DATE

更新列

这样做。

  1. 使用STR_DO_DATE 1
  2. 转换和更新列
  3. 更改列到日期类型。

答案 5 :(得分:0)

如果您在Laravel中进行此操作,则可以在下面这样使用

$covid19Result = DB::select('select DATE_FORMAT(STR_TO_DATE(your_field_name,"%d-%m-%Y"), "%Y-%m-%d") as startDate, active_people, death_people, recover_people from covid_graphs ORDER BY startDate DESC');

对我来说很好

答案 6 :(得分:-1)

也许,创建一个函数(或触发器)并在需要时使用它会很有用:

DROP FUNCTION IF EXISTS makedate;

CREATE FUNCTION makedate(your_field VARCHAR(10)) RETURNS DATE DETERMINISTIC
RETURN 
DATE_FORMAT(STR_TO_DATE(your_field, '%d/%m/%Y' ) , '%Y-%m-%d' );

希望它有所帮助。