请参考以下示例,请让我知道您的想法。
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
答案 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
公式可以这样解释:
DATEDIFF(m, ..., ...)
输出的月份差异请注意,在这种情况下,任玉芝的答案给出的结果为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