我正在从事一个金融项目,我需要计算欠款天数的差异。如果我使用mysql的datediff()方法,那么它将返回基于365天的结果。我需要基于360天的结果。如果使用以下sql查询
select datediff('20140908','20130908') from dual;
mysql返回日期差异365.这是实际的日期差异,但在会计/财务计算中,差异恰好是一年(360天)。这就是我要的。结果应该是360而不是365。 目前我想使用美国标准。
答案 0 :(得分:1)
为了获得与Excel相同的结果,我在MySQL中找到了以下代码:
select case
when (day(Startdate)>=30 or Startdate=last_day(Startdate) then
case
when(day(Enddate)>=30) then
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))
else
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))+days(Enddate)-30
end
else
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))+days(Enddate)-days(Startdate)
end
答案 1 :(得分:0)
使用
TO_DAYS(date2) - To_DAYS(date1)
它返回date1和date2之间的天数。然后你就可以得到你需要的结果了。
答案 2 :(得分:0)
日期=从日期开始 edate =至今
计算两个日期之间的天数,考虑到一个月是30天,一年是360天,并检查该日期是否在该月底,例如从1.1.2019到28.2.2019 = 60天等。
应该是1个月或1年,应该是前一天,所以1.1-31.1 = 30天,1.1-1.2 = 31天
SELECT GREATEST( 0, (YEAR(DATE_ADD(edate,INTERVAL 1 DAY))-YEAR(sate))* 360 + (MONTH(DATE_ADD(edate,INTERVAL 1 DAY))-MONTH(sdate))* 30 + ( IF(DAYOFMONTH(DATE_ADD(edate,INTERVAL 1 DAY)))= DAYOFMONTH(LAST_DAY(DATE_ADD(edate,INTERVAL 1 DAY))),30,DAYOFMONTH(DATE_ADD(edate,INTERVAL 1 DAY))))- IF(DAYOFMONTH(日期)= DAYOFMONTH(LAST_DAY(日期)),30,DAYOFMONTH(日期)) )
答案 3 :(得分:0)
来晚了,但是发布我的解决方案以供将来参考
CREATE FUNCTION `DAYS360_UDF`(sdate DATE, edate DATE)
RETURNS INTEGER
DETERMINISTIC
CONTAINS SQL
BEGIN
DECLARE sdate_360 INTEGER;
DECLARE edate_360 INTEGER;
SET sdate_360 = ( YEAR(sdate) * 360 ) + ( (MONTH(sdate)-1)*30 ) + DAY(sdate);
SET edate_360 = ( YEAR(edate) * 360 ) + ( (MONTH(edate)-1)*30 ) + DAY(edate);
RETURN edate_360 - sdate_360;
END
用法-
select DAYS360_UDF('20130908', '20140908')