修改 的 日期的.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
答案 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)
答案 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' );
希望它有所帮助。