在 SQL 中将时间转换为范围

Posted

技术标签:

【中文标题】在 SQL 中将时间转换为范围【英文标题】:Convert time into range in 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 添加到您的样本数据中,并调整预期相应的结果。 【参考方案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 语法更新

以上是关于在 SQL 中将时间转换为范围的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型

在SQL中将dd / mm / yyyy VARCHAR转换为yyyy-dd-mm DATETIME

在python中将整数列表转换为范围

如何在 SQL 中将数字转换为日期时间

在sql server中将数据和时间转换为数字

如何在 BigQuery 标准 SQL 中将时间戳转换为秒