mysql日期直接减法

3zwjbxry  于 2023-04-19  发布在  Mysql
关注(0)|答案(3)|浏览(123)

我有两个日期列,dateAdateB。如果我从dateBdateB - dateA)中减去dateA,我会得到错误的结果,但不使用DATEDIFF(dateB,dateA)函数。当在有数据的表中使用直接减法时,我会得到错误的结果,但不使用下面的查询。
SELECT DATE('2013-01-31') - DATE('2013-01-27')
为什么?
编辑:
我发现在MySQL中,如果两个日期在一个月内,那么直接相减会给出正确的结果,但如果日期跨越月,年,可能会有问题。
我说的对吗?

yzxexxkh

yzxexxkh1#

假设你的列不是存储为日期,而是存储为字符串。如果它们存储为日期,那么减法将按预期工作。
当您减去两个字符串时,例如:

SELECT '2013-01-31' - '2013-01-27'

然后MySQL将它们转换为数字,基于前导数字。在这种情况下,两者都以数字2013开头,因此两者都被转换为2013(如果开头没有数字,则值将是0)。然后减去这些数字。

odopli94

odopli942#

你的列是定义为date还是Varchars?因为Date作为一个String没有任何意义。当你执行DATE('2013-01-31')时,它创建了一个date对象,因此减法可以工作。所以,如果你的列定义为Varchar,执行DATE(dateB) - DATE(dateA)

zqry0prt

zqry0prt3#

mysql> SELECT '2013-01-31' - '2012-12-27';
+-----------------------------+
| '2013-01-31' - '2012-12-27' |
+-----------------------------+
|                           1 |
+-----------------------------+
1 row in set, 2 warnings (0.00 sec)

mysql> SELECT DATE('2013-01-31') - DATE('2012-12-27');
+-----------------------------------------+
| DATE('2013-01-31') - DATE('2012-12-27') |
+-----------------------------------------+
|                                    8904 |
+-----------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATEDIFF('2013-01-31', '2012-12-27');
+--------------------------------------+
| DATEDIFF('2013-01-31', '2012-12-27') |
+--------------------------------------+
|                                   35 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATEDIFF(DATE('2013-01-31'), DATE('2012-12-27'));
+--------------------------------------------------+
| DATEDIFF(DATE('2013-01-31'), DATE('2012-12-27')) |
+--------------------------------------------------+
|                                               35 |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql>

相关问题