Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql select语句中给出的格式“dd-MM-YYYY”未按预期工作时按日期排序_Mysql_Sql_Database_Mariadb - Fatal编程技术网

Mysql select语句中给出的格式“dd-MM-YYYY”未按预期工作时按日期排序

Mysql select语句中给出的格式“dd-MM-YYYY”未按预期工作时按日期排序,mysql,sql,database,mariadb,Mysql,Sql,Database,Mariadb,我将日期存储在数据库的DATETIME字段中。创建select语句时,我需要以“%d-%m-%Y”格式显示它,但按日期排序数据时遇到问题 这是我的selec声明: SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS Date FROM Purchase WHERE Date BETWEEN '2019-02-01' AND '2019-06-30' ORDER BY Date asc; 但数据并没有按日期排序。如何解决此问题?如果列日期和格式化日期使用相同的名称,则别

我将日期存储在数据库的DATETIME字段中。创建select语句时,我需要以“%d-%m-%Y”格式显示它,但按日期排序数据时遇到问题

这是我的selec声明:

SELECT
DATE_FORMAT(Date,'%d-%m-%Y') AS Date
FROM Purchase
WHERE Date BETWEEN '2019-02-01' AND '2019-06-30' ORDER BY Date asc;

但数据并没有按日期排序。如何解决此问题?

如果列日期和格式化日期使用相同的名称,则别名列的order by work。。按天、月、年的订单也是如此,格式为“%d-%m-%Y”

然后尝试更改别名

SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS My_Date
FROM Purchase
WHERE Date BETWEEN '2019-02-01' AND '2019-06-30' 
ORDER BY Date asc;
或者按格式使用适当的顺序

SELECT DATE_FORMAT(Date,'%d-%m-%Y')Date
FROM Purchase
WHERE Date BETWEEN '2019-02-01' AND '2019-06-30' 
ORDER BY DATE_FORMAT(Date,'%Y-%m-%d') asc;

您可以通过告诉SQL按Purchase.Date字段(而不是格式化的字符串日期值)订购来解决此问题。当您选择按日期订购而未指定表或表别名时,SQL假定您希望格式化的结果别名为日期,而不是购买表中的日期字段

SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS My_Date
FROM Purchase
WHERE Date BETWEEN '2019-02-01' AND '2019-06-30' 
ORDER BY Purchase.Date asc;

使用不同的别名,或使用表名限定order by中的日期,这样MySQL就知道您想要使用的是字段值,而不是select表达式的值。MySQL不应该对日期进行可视化。这是前端用户界面(如网页)的任务。如果您将日期保持为本机格式,您的情况会更好,并且更容易将其存储在程序datetime对象中。如果没有排序子句,则无法保证结果的顺序。即使它是根据你的结果进行排序的,根据偶然情况,它也会按字符串排序,因此第11位将出现在第2位之前……好的@Roly,那么下面的答案对你来说应该很有用。作为一种常规做法,我尝试使用不同于查询中任何现有字段名的别名来保持内容的明确性。以MySQL格式存储日期。这本可以避免所有这些麻烦。