如何在mysql中有效地处理日期和时间

学习在SQL中管理日期和时间以及指定与时间相关的数据库查询所需的所有命令。...

日期和时间很重要,它们有助于保持事物的有序性,并且是任何软件操作不可或缺的一个方面。

Use the date wisely in SQL

在数据库中高效地使用它们有时看起来很混乱,不管是跨不同的时区工作、添加/减去日期,还是其他操作。

学习各种MySQL函数,以便轻松地处理和管理数据库中的日期/时间。

使用时区

为了帮助保持标准化,您应该只使用UTC时区中的日期/时间。每次建立到MySQL数据库的连接时,都应该将时区切换到UTC,这可以通过以下SQL语句完成:

SET TIME_ZONE = '+0:00'

由于所有日期现在都将保存在UTC中,所以您总是知道您正在使用什么,使事情更加简单和直接。

必要时,您可以使用方便的convert\u TZ()MySQL函数轻松地转换任何datetime/timestamp值的时区。首先需要知道偏移量,例如,北美西海岸的PST是UTC-08:00,因此可以使用:

SELECT CONVERT_TZ('2021-02-04 21:47:23', '+0:00', '-8:00');

结果是2021-02-04 13:47:23,这是完全正确的。传递给CONVERT\u TZ()的三个参数是第一个开始的日期时间/时间戳(使用now()表示当前时间),第二个参数总是“+0:00”,因为数据库中的所有日期都强制为UTC,最后一个参数是我们希望将日期转换为的偏移量。

加减日期

很多时候,您需要添加或减去日期,例如,如果您需要检索一周前的记录,或者从现在开始安排一个月的时间。

值得庆幸的是,MySQL拥有出色的DATE\u ADD()和DATE\u SUB()函数,使这项任务非常简单。例如,可以使用SQL语句从当前日期减去两周:

SELECT DATE_SUB(now(), interval 2 week);

如果您希望在现有时间戳上添加三天,则可以使用:

SELECT DATE_ADD('2021-02-07 11:52:06', interval 3 day);

两个函数的工作原理相同,第一个参数是开始的时间戳,第二个参数是要加或减的间隔。第二个参数的格式总是相同的,从单词interval开始,后跟一个数字值和interval本身,可以是以下任意值:second、minute、hour、day、week、month、quarter、year。

例如,如果要检索过去34分钟内发生的所有登录,可以使用SQL语句,例如:

SELECT * FROM logins WHERE login_date >= DATE_SUB(now(), interval 45 minute);

如您所见,这将从logins表中检索登录日期大于当前时间减去45分钟的所有记录,换句话说,就是过去的45分钟。

获取日期之间的差异

有时你需要知道两次约会之间经过了多少时间。使用DATEDIFF函数,您可以很容易地获得两个不同日期之间的天数,例如下面的SQL语句:

SELECT DATEDIFF(now(), '2020-12-15');

DATEDIFF函数接受两个参数,这两个参数都是日期/时间戳,并给出它们之间的天数。上面的例子将显示从2020年12月15日到今天的天数。

要获取两个日期之间的秒数,可以使用To_seconds()函数,例如:

SELECT TO_SECONDS(now()) - TO_SECONDS('2021-02-05 11:56:41');

这将导致提供的两个日期之间的秒数。

从日期中提取段

有各种MySQL函数可以让您轻松地从日期中提取特定的片段,例如如果您只想要月份、一年中的某一天或某个小时。下面是一些此类函数的示例:

SELECT MONTH('2021-02-11 15:27:52'); SELECT HOUR(now()); SELECT DAYOFYEAR('2021-07-15 12:00:00');

上面的SQL语句将导致02,即当前时间,以及196,因为9月15日是一年中的第196天。以下是所有可用日期提取函数的列表,每个函数只接受一个参数,提取的日期来自:

- SECOND()- MINUTE()- HOUR()- DAY()- WEEK() - Number 0 - 52 defining the week within the year.- MONTH()- QUARTER() - Number 1 - 4 defining the quarter of the year.- YEAR()- DAYOFYEAR() - The day of the year (eg. Sept 15th = 196).- LAST_DAY() - The last day in the given month.- DATE() - The date in YYYY-MM-DD format without the time.- TIME() The time in HH:II:SS format without the date.- TO_DAYS() - The number of days since A.D. 0.- TO_SECONDS() - The number of seconds since A.D. 0.- UNIX_TIMESTAMP() - The number of seconds since the epoch (Jan 1st, 1970)

例如,如果您只想检索创建所有用户的月份和年份,则可以使用SQL语句,例如:

SELECT id, MONTH(created_at), YEAR(created_at) FROM users;

这将检索users表中的所有记录,并显示每个用户在中创建的id、、月份和年份。

按日期期间分组记录

date函数的一个很好的用法是能够在SQL语句中使用groupby按日期段对记录进行分组。例如,您可能希望将2020年所有订单的总金额按月份分组。您可以使用SQL语句,例如:

SELECT MONTH(created_at), SUM(amount) FROM orders WHERE created_at BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59' GROUP BY MONTH(created_at);

这将检索2020年下达的所有订单,按创建的月份对其进行分组,并返回12条记录,显示年度每个月订购的总金额。

请注意,为了获得更好的索引性能,最好避免在SQL语句的WHERE子句中使用诸如YEAR()之类的日期函数,而是使用BETWEEN运算符,如上面的示例所示。

不要再和约会混淆了

使用以上知识,您现在可以在各种用例中高效地处理、翻译和执行日期和时间操作。

为了简单起见,请记住在处理日期时始终使用UTC,并利用以上提示在软件中有效地管理日期,无论是完成简单的计算还是轻松地按日期周期分组的报表。

如果您对SQL有点陌生,请确保签出这些基本的SQL命令,以帮助改进SQL使用。

  • 发表于 2021-03-26 17:00
  • 阅读 ( 234 )
  • 分类:编程

你可能感兴趣的文章

如何用java连接mysql数据库

... 在本文中,让我们看看连接到MySQL数据库的详细信息以及如何使用它执行一些查询。 ...

  • 发布于 2021-03-11 17:39
  • 阅读 ( 331 )

如何在windows上安装mysql数据库

...常编写连接到数据库服务器的应用程序,那么如果您知道如何在Windows机器上安装MySQL数据库以进行测试,这会有所帮助。 ...

  • 发布于 2021-03-11 21:33
  • 阅读 ( 346 )

如何在raspberry pi上托管wordpress站点

... 下面介绍如何在本地和web上的Raspberry Pi和宿主网站上设置Apache、MySQL和PHP。 ...

  • 发布于 2021-03-21 11:33
  • 阅读 ( 247 )

mysql数据库模式编写入门指南

... 在您的模式就位后,确保您知道如何将其与这些基本的SQL命令一起使用。 ...

  • 发布于 2021-03-26 19:24
  • 阅读 ( 212 )

如何使用sql连接一次查询多个数据库表

... 让我们探索如何从多个数据库表中准确地检索所需的数据,以及各种可用的联接,这些联接允许您提取所需的准确结果。 ...

  • 发布于 2021-03-27 04:02
  • 阅读 ( 292 )

为下一个项目考虑6个数据库引擎

...由甲骨文开发的商业数据库引擎。mySQL的关系结构、高效处理数亿条记录的能力,再加上其丰富的特性,使其成为绝大多数中小企业运营的最佳选择。 ...

  • 发布于 2021-03-28 09:56
  • 阅读 ( 257 )

如何使用mysql跨多个设备同步kodi库

...那会是件好事吗? 嗯,可能只是需要一点准备。下面是如何做到这一点。 你需要什么 我们将要实现的同步魔法的核心是一个MySQL数据库。如果你以前从未使用过,不要惊慌!它确实需要一点技术诀窍,但我们在这里指导您的...

  • 发布于 2021-04-07 04:56
  • 阅读 ( 436 )

如何构建自己的usenet索引器

...和NZBs(dot)ORG,但是它们只索引了一些Usenet。下面介绍如何构建自己的索引器,以便您可以索引所需内容。 你需要的东西: 运行Ubuntu的计算机。 Usenet帐户。 对Linux终端有基本的了解。 一个像样的互联网连接。 如果你有以...

  • 发布于 2021-04-12 07:01
  • 阅读 ( 184 )

sql语句(sql)和mysql数据库(mysql)的区别

...或删除存储在特定数据库中的数据的函数。SQL不需要指定如何获取数据库中的记录。这使它成为一种自然的数据库语言。它于1986年发布,被誉为使用最广泛的数据库语言。作为第四代编程语言,SQL在本质上也是多范式的。SQL代...

  • 发布于 2021-07-07 07:01
  • 阅读 ( 244 )

神谕(oracle)和mysql数据库(mysql)的区别

...性强、使用方便等优点。Parameters of ComparisonOracleMySQL发布日期19801995系统类型它可以在静态和动态系统中平稳运行。它只能与静态系统一起工作。空值Oracle不支持空值系统。MySQL支持空值系统。存储空间众所周知,Oracle拥有表空间...

  • 发布于 2021-07-09 21:32
  • 阅读 ( 179 )
yplb9714
yplb9714

0 篇文章

相关推荐