【问题标题】:Convert time into range in SQL在 SQL 中将时间转换为范围
【发布时间】:2019-10-03 15:45:36
【问题描述】:

我有一个日期时间字段,显示为例如:2019-05-13 13:01:39

我希望它在 SQL 中以 1-2pm13-14pm 的形式出现。

同样,2019-05-03 19:31:31 应显示为7-819-20

这在使用查询的 SQL 中可行吗?

【问题讨论】:

  • 日期函数因 DBMS 而异。请标记您的 DBMS,以便我们回答
  • 是的,可以完成,但是你现在用的是哪个数据库?
  • 我使用的是MYSQL数据库
  • 可以作为查询的一部分来完成吗?因为我以 2019-05-13 13:01:39 格式插入 db 并且无法更改。我希望新格式成为 SQL 查询的一部分
  • 将 2019-05-03 00:31:31、2019-05-03 11:31:31 和 2019-05-03 23:31:31 添加到您的样本数据中,并调整预期相应的结果。

标签: mysql sql datetimerangefield


【解决方案1】:

这是一个使用 DATE_FORMAT 和 DATE_ADD 以及 24 小时制的解决方案

SELECT CONCAT(DATE_FORMAT('2019-05-03 19:31:31', '%H'), '-', 
              DATE_FORMAT(DATE_ADD('2019-05-03 19:31:31', INTERVAL 1 HOUR), '%H'))

同样的解决方案是 12 小时制

SELECT CONCAT(DATE_FORMAT('2019-05-03 19:31:31', '%h'), '-',
              DATE_FORMAT(DATE_ADD('2019-05-03 19:31:31', INTERVAL 1 HOUR), '%h %p'))

这将输出

小时
19-20
07-08 PM

有趣的是,如果时间在晚上 11 点之后,这将给出以下输出

小时
23-00
上午 11 点至 12 点

这是否比例如 23-24 更好,或者这只是显示时间的一种不好的方式?也许对于 12 小时制,每次之后都有 AM/PM 会更好

晚上 11 点 - 凌晨 12 点

【讨论】:

    【解决方案2】:

    您可以使用MySqlEXTRACT 函数来获取日期或时间的任何部分。更多详情请访问Here

    SELECT CONCAT(EXTRACT(hour FROM yourdate) , '-' , (EXTRACT(hour FROM yourdate) + 1))
    

    【讨论】:

    • 这里是real 文档
    • 最有可能是因为您链接到 w3schools..w3schools 过去有非常糟糕(过时)的信息,它仍然可能有他们的名字 w3fools 或类似的东西。
    • 但是用于字符串连接的 + 运算符在 MySQL 中不起作用.. + 运算符是 SQL Server (MSSQL) 语法。 MySQL 使用CONCAT() 进行字符串连接
    • 使用正确的MySql 语法更新
    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 2019-11-20
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多