ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL中的日期时算术需要INTERVAL吗?

2019-08-31 07:15:10  阅读:207  来源: 互联网

标签:mysql date intervals


在使用数学创建相对日期时,是否总是需要在MySQL中使用区间函数?

我在MS-Access 2010中使用Date() – Weekday(Date())并尝试在MySQL中使用curdate() – dayofweek(curdate()).我得到了一些不起眼的数字,在搜索后发现this StackOver answer完成了我想要的东西.

阅读完this support article后我想确定我理解这一点 – 任何时候我想用日期函数做简单的数学运算,我必须使用区间函数并声明我想要使用的单位时间?

如果我不使用区间函数,那么我从curdate() – dayofweek(curdate())获得的数字是否有用?

我之前从未使用过间隔,而我只是习惯于将日期格式和数字格式视为同一个格式的MS产品.寻找一些澄清.

解决方法:

从curdate() – dayofweek(curdate())返回的数字是没有用的.

SELECT curdate() - dayofweek(curdate())

+----------------------------------+
| curdate() - dayofweek(curdate()) |
+----------------------------------+
|                         20140097 |
+----------------------------------+

您正在查看的是20140103号减去数字6的结果,它与任何可用日期没有任何相似之处:

> select 20140103 - 6;
+--------------+
| 20140103 - 6 |
+--------------+
|     20140097 |
+--------------+

因为您没有使用INTERVAL,所以MySQL似乎将日期2014-01-03转换为数字20140103,而减去当前工作日(6)的结果是无意义的. (我实际上对这件事感到惊讶 – 我本来预料到错误或结果不同1).

您需要使用INTERVAL说明符进行简单算术或使用许多MySQL’s date/time functions.

在某些情况下,如果通过UNIX_TIMESTAMP(datetime),FROM_UNIXTIME(datetime)将值转换为整数作为Unix时间戳,则可以使用INTERVAL.尽管如此,但是我还是建议使用真实的日期/时间函数来处理实际的DATE / DATETIME值.

select curdate() - INTERVAL dayofweek(curdate()) DAY;
+-----------------------------------------------+
| curdate() - INTERVAL dayofweek(curdate()) DAY |
+-----------------------------------------------+
| 2013-12-28                                    |
+-----------------------------------------------+
1 row in set (0.00 sec)

这还差不多 :)

1我没有对发生的铸造行为有任何解释,因为我原本期望这样做.不用说,这不是你应该使用或依赖的东西:

SELECT CAST('2014-01-03' AS UNSIGNED);
+------------------------------+
| CAST('2014-01-03' AS UNSIGNED) |
+------------------------------+
|                         2014 |
+------------------------------+

……实际上,这里是将DATE转换为无符号INTEGER:

SELECT CAST(STR_TO_DATE('2014-01-03', '%Y-%m-%d') AS UNSIGNED);
+---------------------------------------------------------+
| CAST(STR_TO_DATE('2014-01-03', '%Y-%m-%d') AS UNSIGNED) |
+---------------------------------------------------------+
|                                                20140103 |
+---------------------------------------------------------+

标签:mysql,date,intervals
来源: https://codeday.me/bug/20190831/1773805.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有