【问题标题】:How can i get the date and time from the datetime string in mysql如何从mysql中的日期时间字符串中获取日期和时间
【发布时间】:2020-01-19 22:45:11
【问题描述】:
id    user_id   created_at          status          amount
16924   4387 15-03-2019 15:33   bill created    149250
16925   4387 15-09-2019 15:47   bill created    444600
16926   4387 31-07-2019 15:31   bill created    879200

我想对created_at 列进行排序

我使用的查询如下:

SELECT * FROM settlement ORDER BY CONVERT(DATE, created_at,101);

这里settlement 是我的表名。运行错误后我得到:

ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“created_at,101) LIMIT 100”附近使用正确的语法

有没有办法获取排序列表?

【问题讨论】:

标签: mysql sql date datetime sql-order-by


【解决方案1】:

CONVERT(...) 是 SQL Server 语法,MySQL 不支持该语法。你可以改用STR_TO_DATE()

ORDER BY STR_TO_DATE(created_at, '%d-%m-%Y %H:%i')

STR_TO_DATE() 的第二个参数是格式说明符。对于您的用例:

  • %d: 日期,数字 (01..31)
  • %m:月份,数字 (01..12)
  • %Y:年份,数字,四位数字
  • %H:小时 (00..23)
  • %i:分钟,数字 (00..59)

旁注:修复您的数据模型!将日期存储为字符串是许多弊端的根源。您很快就会在查询中一次又一次地将字符串转换为日期,这容易出错且效率极低,因为它会阻止数据库利用日期列上的现有索引。

【讨论】:

  • 感谢工作,但是当我尝试 SELECT STR_TO_DATE('15-09-2019 15:47:00','%d,%m,%Y') 作为日期时;这给出了一个空结果
  • @AbhipsaPatro:好吧,格式说明符'%d,%m,%Y' 与您输入的字符串不匹配,这里应该是'%d-%m-%Y %H:%i:%s'
  • 欢迎@AbhipsaPatro。如果我的回答正确回答了您的问题,那么请点击对号 accept it...谢谢!
【解决方案2】:

created_at,应该是datetime 类型。

这样一来,对它的所有 SQL 操作都不需要特别注意。

当您检索它时,您可以使用应用程序代码以美国格式显示日期。另一种方法是使用DATE_FORMAT

可以通过以下方式进行修改:

ALTER TABLE settlement ADD created_at_real DATETIME;
UPDATE settlement SET created_at_real = STR_TO_DATE(created_at, '%d-%m-%Y %H:%i');
ALTER TABLE settlement DROP COLUMN created_at, RENAME COLUMN created_at_read TO created_at;

那么你的查询变成:

select * from settlement ORDER BY created_at

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2013-04-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多