在 SQL 中将时间转换为范围
Posted
技术标签:
【中文标题】在 SQL 中将时间转换为范围【英文标题】:Convert time into range in SQL 【发布时间】:2019-10-03 15:45:36 【问题描述】:我有一个日期时间字段,显示为例如:2019-05-13 13:01:39
。
我希望它在 SQL 中以 1-2pm
或 13-14pm
的形式出现。
同样,2019-05-03 19:31:31
应显示为7-8
或19-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 添加到您的样本数据中,并调整预期相应的结果。 【参考方案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】:您可以使用MySql
的EXTRACT
函数来获取日期或时间的任何部分。更多详情请访问Here
SELECT CONCAT(EXTRACT(hour FROM yourdate) , '-' , (EXTRACT(hour FROM yourdate) + 1))
【讨论】:
这里是real 文档 最有可能是因为您链接到 w3schools..w3schools 过去有非常糟糕(过时)的信息,它仍然可能有他们的名字 w3fools 或类似的东西。 但是用于字符串连接的 + 运算符在 MySQL 中不起作用.. + 运算符是 SQL Server (MSSQL) 语法。 MySQL 使用CONCAT()
进行字符串连接
使用正确的MySql
语法更新以上是关于在 SQL 中将时间转换为范围的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型