基于360天的mysql日期差异

时间:2014-09-08 07:41:12

标签: mysql

我正在从事一个金融项目,我需要计算欠款天数的差异。如果我使用mysql的datediff()方法,那么它将返回基于365天的结果。我需要基于360天的结果。如果使用以下sql查询

select datediff('20140908','20130908') from dual;

mysql返回日期差异365.这是实际的日期差异,但在会计/财务计算中,差异恰好是一年(360天)。这就是我要的。结果应该是360而不是365。 目前我想使用美国标准。

4 个答案:

答案 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')