如何在MySQL中使用[]命令DATETIME行

时间:2017-12-28 21:17:38

标签: php mysql

我有一个mysql"用户"像这个例子的表:

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_FORMAT:

SELECT id,user,DATE_FORMAT(created,"%d %m %Y") AS created FROM users ORDER by created desc

但它没有显示,我怎么能得到它?

我想要一些帮助。

2 个答案:

答案 0 :(得分:2)

这有效:

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

这是一个有效的SQL Fiddle

<强>解释

MID() MySQL函数返回字符串的中间部分,因此我们很容易删除[]。之后,STR_TO_DATE()函数将返回的string解析为DATETIME格式(%p用于AM/PM)。返回值格式不正确,至少不是您想要的方式。然后我们使用DATE_FORMAT()格式化输出。最后,我们再次使用STR_TO_DATE()进行排序,因为created:作为string返回。

我还将您的created输出列更改为created:,因为如果它们的名称相同,则无效。

答案 1 :(得分:0)

您的<script src="https://unpkg.com/vue/dist/vue.js"></script> <div id="app"> <select style="width: 175px" v-model="selectedLabel"> <option value="">None</option> <option v-for="label in labels" :value="label.value">{{label.description}}</option> </select> </div>日期格式不正确,您应该更改表并将字段从varchar / char(字符串)更改为created类型。我已经尝试使用&#39; STR_TO_DATE()&#39;转换您的字符串日期。但它返回timestamp,因为格式不匹配nulltimestampdate格式。将日期/日期时间存储为timedate数据类型始终是最佳做法。您可以随后在查询中应用格式化函数,以将日期输出为任何所需的格式。