Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Php 如何在MySQL中使用[]对日期时间行进行排序_Php_Mysql - Fatal编程技术网

Php 如何在MySQL中使用[]对日期时间行进行排序

Php 如何在MySQL中使用[]对日期时间行进行排序,php,mysql,Php,Mysql,我有一个mysql“users”表,如下例所示: id | user | created 100 | user001 | [27-01-2016 04:30 PM] 101 | user005 | [19-05-2017 09:28 AM] 102 | user019 | [09-10-2015 03:29 PM] 103 | user029 | [18-11-2017 05:40 PM] 我想通过创建这样的行,按降序得到这个表: id | user | created 103

我有一个mysql“users”表,如下例所示:

id  | user    | created
100 | user001 | [27-01-2016 04:30 PM]
101 | user005 | [19-05-2017 09:28 AM]
102 | user019 | [09-10-2015 03:29 PM]
103 | user029 | [18-11-2017 05:40 PM]
我想通过创建这样的行,按降序得到这个表:

id  | user    | created
103 | user029 | [18-11-2017 05:40 PM]
101 | user005 | [19-05-2017 09:28 AM]
100 | user001 | [27-01-2016 04:30 PM]
102 | user019 | [09-10-2015 03:29 PM]
我尝试了DATE_格式:

SELECT id,user,DATE_FORMAT(created,"%d %m %Y") AS created FROM users ORDER by created desc
但它什么也看不出来,我怎么能得到它

我需要一些帮助

这是有效的:

SELECT `id`, `user`, DATE_FORMAT(STR_TO_DATE(MID(`created`, 2, 19), '%d-%m-%Y %h:%i %p'), '%d-%m-%Y %h:%i %p') 
AS `created:`  FROM `users` ORDER BY STR_TO_DATE(`created:`,'%d-%m-%Y %h:%i %p') DESC
这是一张工作票

说明:

MID()
MySQL函数返回字符串的中间部分,因此我们很容易去掉
[]
。之后,
STR_TO_DATE()
函数将返回的
字符串
解析为
DATETIME
格式(
%p
用于
AM/PM
)。返回值的格式不正确,至少不是您希望的格式。因此,我们使用
DATE\u FORMAT()
格式化输出。最后,我们再次使用
STR_TO_DATE()
进行排序,因为
已创建:
作为
字符串返回

我还将您的
created
输出列更改为
created:
,因为如果它们都是相同的名称,则该列将不起作用。

此功能:

SELECT `id`, `user`, DATE_FORMAT(STR_TO_DATE(MID(`created`, 2, 19), '%d-%m-%Y %h:%i %p'), '%d-%m-%Y %h:%i %p') 
AS `created:`  FROM `users` ORDER BY STR_TO_DATE(`created:`,'%d-%m-%Y %h:%i %p') DESC
这是一张工作票

说明:

MID()
MySQL函数返回字符串的中间部分,因此我们很容易去掉
[]
。之后,
STR_TO_DATE()
函数将返回的
字符串
解析为
DATETIME
格式(
%p
用于
AM/PM
)。返回值的格式不正确,至少不是您希望的格式。因此,我们使用
DATE\u FORMAT()
格式化输出。最后,我们再次使用
STR_TO_DATE()
进行排序,因为
已创建:
作为
字符串返回


我还将您的
created
输出列更改为
created:
,因为如果它们都是相同的名称,则该列将不起作用。

您的
created
日期格式不正确,您应该更改该表,并将字段从varchar/char(string)更改为
timestamp
类型。我已经尝试用“”转换字符串日期,但它返回
null
,因为格式与
时间戳
日期
时间
格式不匹配。最好的做法是将日期/日期时间存储为
date
timestamp
数据类型。您可以在以后的查询中应用格式化函数,将日期输出为任何所需的格式。

您创建的
日期格式不正确,您应该更改表格,并将字段从varchar/char(字符串)更改为
timestamp
类型。我已经尝试用“”转换字符串日期,但它返回
null
,因为格式与
时间戳
日期
时间
格式不匹配。最好的做法是将日期/日期时间存储为
date
timestamp
数据类型。您可以在以后的查询中应用格式化功能,将日期输出为任何所需的格式。

您需要的格式,而不是
DATE\u格式
。但最好使用列的DATETIME或TIMESTAMP而不是字符串。问题中提到的@NekoLopez的可能重复项是您的列
DATETIME
?如果没有,我会删除我的asnwer并检查上面的链接。@PaulSpiegel实际上,他需要两者
STR_TO_DATE()
要解析日期并对其排序,请使用
DATE_FORMAT()
以不同格式显示输出。@Barmar我在问题中没有看到任何关于“以不同格式显示输出”的内容。预期结果的格式与原始数据相同。您需要使用而不是
DATE\u格式
。但最好使用列的DATETIME或TIMESTAMP而不是字符串。问题中提到的@NekoLopez的可能重复项是您的列
DATETIME
?如果没有,我会删除我的asnwer并检查上面的链接。@PaulSpiegel实际上,他需要两者
STR_TO_DATE()
要解析日期并对其排序,请使用
DATE_FORMAT()
以不同格式显示输出。@Barmar我在问题中没有看到任何关于“以不同格式显示输出”的内容。预期结果的格式与原始数据相同。