mysql怎么算两个日期之间的天数

sql里日期怎么加减

让我告诉你一件事。
前年我和一个客户合作的ERP系统使用的是SQL Server。
当时确实很头疼。
他们想查看员工入职后的月工资单,这个日期让我困扰了一段时间。

如果你想一想,如果我使用SQL Server,我会使用DATEADD函数。
这个功能非常好用,直接添加即可。
例如,如果要添加三个月,请像这样编写 DATEADD(month, 3 , '2 02 3 -01 -01 ') 。
要进行减法,请使用负数 DATEADD(month, -3 , '2 02 3 -01 -01 ')。

后来认识了PostgreSQL,比较好玩。
当他们制作该报告时,他们需要计算某个活动的结束日期,即活动的开始日期加上 7 天。
我只是使用INTERVAL '7 days',就像数字相加一样,'2 02 3 -01 -01 ' + INTERVAL '7 days',结果是'2 02 3 -01 -08 ',非常方便。

我也经常使用MySQL,使用DATE_ADD和DATE_SUB。
如果添加年份,则为 DATE_ADD('2 02 3 -01 -01 ', INTERVAL 1 YEAR),如果减去年份,则为 DATE_SUB('2 02 3 -01 -01 ', INTERVAL 1 YEAR)。

但是,如果直接加减数字,我建议你要小心。
我曾经尝试在Oracle中这样做,但日期只是跑掉了,变成了负数什么的,并使整个报告错误。
查了半天,发现那家伙得先转成日期,然后再添加。
因此,直接添加数字取决于您使用的数据库以及数据库的设置方式。
我以前没接触过这个,不敢乱说。

一般来说,在对日期进行加减运算时,使用函数肯定是最安全的,尤其是DATEADD、DATE_SUB和INTERVAL。
经常使用它们后,您就会熟悉它们。
但如果想做更复杂的事情,比如跨越年月,或者计算工作日,就得自己写逻辑,或者使用数据库自​​带的WORKDAY等函数。
这取决于数据库是否支持。
我记得那年我写了一个查询,计算出某一天之后第一个星期一的日期。
我很困惑,最后我用 DATEADD 和 DAYOFWEEK 弄清楚了。

此外,您确实需要注意时区。
去年我在新加坡领导了一个团队并有一个项目。
那里的时间是UTC+8 ,但这里的时间是UTC+0。
当我创建报告时,日期全错了,客户差点跳楼。
后来我们统一使用UTC时间,或者直接让数据库按照客户的时区来计算,就解决了问题。

所以,在做SQL日期计算的时候,不要光写代码,多看官方文档,尤其是时区和夏令时,真的会坑你的。
我告诉你,你踩过的坑都是你用真金白银买来的教训!

php+mysql环境中,如何计算月份相减?

有一次,我和朋友们去海滩露营,我记得每当我们晚上无聊的时候就数星星。
正当我数数的时候,我突然想到:“如果这个月是现在的一月,而这是一年前的一月,那么现在和一年前相差多少个月?”等等,还有一件事。
我突然想到,如果按日期计算的话,应该等于date(&3 9 ;m&3 9 ;,strtotime($date1 ))-date("m",strtotime($date2 ))。
您可以通过这种方式计算几个月的差异。
时间是一年前,地点当然是我们露营的海滩。
但您仍然需要处理一些硬数据。