sql server中两个日期之间的月差异

时间:2013-12-19 08:54:15

标签: sql sql-server

请参考以下示例,请让我知道您的想法。

declare @EmployeeStartDate datetime='01-Sep-2013'
declare @EmployeeEndDate datetime='15-Nov-2013'
select DateDiff(mm,@EmployeeStartDate, DateAdd(mm, 1,@EmployeeEndDate)) 

输出= 3 预期产出= 2.5

由于我在11月只有15天,所以我应该获得11月的0.5

7 个答案:

答案 0 :(得分:9)

试试这个

SELECT CASE WHEN DATEDIFF(d,'2013-09-01', '2013-11-15')>30 THEN DATEDIFF(d,'2013-09-01', '2013-11-15')/30.0 ELSE 0 END AS 'MonthDifference'

OR

SELECT DATEDIFF(DAY, '2013-09-01', '2013-11-15') / 30.436875E

答案 1 :(得分:1)

DateDiff比较您指定的列的值以计算差异,它不会比较两个日期并给出确切的差异。你告诉它要比较月值,这就是所有它正在看它。

http://technet.microsoft.com/en-us/library/ms189794.aspx

Technet文章详细介绍了DateDiff函数的返回值 - 请注意它只是int。

如果你想把这个值作为一个确切的数字(或者nearabouts),你应该把日期标记为日期,然后除以30.为了整洁,我还要四舍五入到一个小数位。

select Round(Convert(decimal, DateDiff(dd,@EmployeeStartDate, @EmployeeEndDate)) / 30, 1)

答案 2 :(得分:1)

你走了:

declare @EmployeeStartDate datetime='01-Sep-2013'
declare @EmployeeEndDate datetime='15-Nov-2013'

;WITH cDayDiff AS
(
   select DateDiff(dd,@EmployeeStartDate, DateAdd(dd, 1,@EmployeeEndDate)) as days
)
SELECT
   CAST(days as float) / 30  as Months
FROM
   cDayDiff

它有76天,等于2.5333

输出:

Months
============
2.53333333333333

答案 3 :(得分:1)

select CAST(DATEDIFF(MONTH, StartDate, EndDate) AS float) -
  (DATEPART(dd,StartDate)*1.0 - 1.0) / DAY(EOMONTH(StartDate)) +
  ((DATEPART(dd,EndDate)*1.0 ) / DAY(EOMONTH(EndDate)))

答案 4 :(得分:0)

据我所知,没有其他答案考虑到并非所有月份都恰好是30天。

这是我想出的:

DECLARE @StartDate DATETIME = '07-Oct-2018'
DECLARE @EndDate DATETIME = '06-Nov-2018'
SELECT
    DATEDIFF(m, @StartDate, @EndDate)
    + 1.0 * DAY(@EndDate) / DAY(EOMONTH(@EndDate))
    - 1.0 * DAY(@StartDate) / DAY(EOMONTH(@StartDate))

-- 0.974193548388

公式可以这样解释:

  1. DATEDIFF(m, ..., ...)输出的月份差异
  2. 加上最后日期的天除以该月的天数
  3. 减去第一个日期的天除以该月的天数

请注意,在这种情况下,任玉芝的答案给出的结果为1.006451612904。 1.0是使除法运算在浮点数而不是整数中所必需的。

答案 5 :(得分:0)

您可以使用“下方”来计算MySQL中两个日期之间的月数,

PERIOD_DIFF(concat(year(Date1),LPAD(month(Date1),2,0)),concat(year(Date2),LPAD(month(Date2),2,0)))

答案 6 :(得分:0)

declare @EmployeeStartDate datetime='013-09-01'
declare @EmployeeEndDate datetime='2013-11-15'
SELECT DATEDIFF(month, @EmployeeStartDate, @EmployeeEndDate)

为此。 https://www.w3schools.com/sql/func_sqlserver_datediff.asp