Php 如何在MySQL中使用[]对日期时间行进行排序
我有一个mysql“users”表,如下例所示: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
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我在问题中没有看到任何关于“以不同格式显示输出”的内容。预期结果的格式与原始数据相同。