前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 MySQL 中处理日期和时间(五)

在 MySQL 中处理日期和时间(五)

作者头像
MySQL技术
发布2022-06-08 18:52:30
4.1K0
发布2022-06-08 18:52:30
举报
文章被收录于专栏:MySQL技术MySQL技术

第五章节:如何在 SELECT 查询中使用时态数据

在 MySQL 中的日期和时间系列的最后一部分中,我们将通过编写 SELECT 查询来将迄今为止学到的所有知识付诸实践,以获得对数据的与日期相关的细节。

  • 从 Datetime 列中选择日期

数据库从业人员在尝试查询日期时遇到的首要挑战之一是大量时间数据存储为 DateTime 和 Timestamp 数据类型。例如,Sakila 示例数据库将 customer 表的 create_date 列存储为 Datetime:

因此,如果我们尝试选择在特定日期创建的客户记录,就不能只提供日期值:

一个简单的解决方法是使用 DATE() 函数将 Datetime 值转换为日期:

现在,任何匹配日期的记录都将被返回。

  • 获取两个日期之间的差异

执行确定某件事发生多久之前的查询是非常常见的。在 MySQL 中,这样做的方法是使用 DATEDIFF() 函数。它接受两个日期值并返回它们之间的天数。以下是一个简单示例:

请注意,在上面的示例中,DATEDIFF() 让我们知道第一个日期比第二个日期晚 10 天。第一个参数也可以使用更早的日期,它将返回一个负值:

  • 计算天数以外的时间段

对于天数以外的时间段,我们需要做一些转换。例如,我们可以除以 7 来获得两个日期之间的周数。使用舍入可以在结果中显示整数周:

ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout

对于其他时间段,TIMESTAMPDIFF() 函数可能会有所帮助。它接受两个 TIMESTAMP 或 DATETIME 值(DATE 值将在 MySQL 中自动转换)以及我们想要差异的时间单位。例如,我们可以在第一个参数中指定 MONTH 作为单位:

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')

-- Outputs: 0

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')

-- Outputs: 1

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')

-- Outputs: 1

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')

-- Outputs: 7

  • 一个更复杂的例子

一旦掌握了 DATEDIFF() 函数的窍门,就可以以更进阶的方式使用它。举个例子,这里有一个查询,它使用 DATEDIFF() 函数来计算客户在归还电影之前租借的平均天数:

为此,将 DATEDIFF() 函数的结果传递给 AVG() 函数,然后四舍五入到小数点后 1 位。

  • 系列总结

我们在这个日期和时间系列中涵盖了很多内容,包括:

虽然在 MySQL 中处理时态数据肯定还有很多工作要做,但希望本系列能让你在学习 MySQL 的道路上有个很好的开端。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档