2008-10-30 85 views
0

我想计算两个日期的月份差异,这将返回一个浮点值。SQL:按月计算

例如:

DATE1 = '4/23/2008' 的 DATE2 = '12/31/2008' 的

,这将是7.y个月。我想找到y值。有人可以给我的公式,使这个在SQL代码? tnx ..

回答

1

有没有标准的SQL来处理这个普遍。这取决于你正在使用的数据库。基本上,您需要将两个日期字符串转换为您的数据库引擎在内部使用的日期格式,然后减去两个日期,减法的结果将再次取决于该日期。在Oracle中,您将使用to_date()进行转换,并且减法的结果将是一个表示以天数为单位的时间的浮点数。

总之,在数据库的手册中搜索关于日期处理或数据类型的部分。

0

Sql Server的近似结果;

select cast(datediff(dd, date1, date2) as float)/30 
1

因为月份长短不一,为了简单起见,我假设一个月内30天。以一位数的精度,这不会有太大的差别,但不要尝试根据结果值计算新的日期,因为它们不会100%准确。

(我会试着找到一种方法,更很好地格式化......)

DECLARE @d1 DATETIME 
DECLARE @d2 DATETIME 

SET @d1 = '2008-04-23' 
SET @d2 = '2008-12-31' 

SELECT CONVERT(FLOAT, DATEDIFF(mm, @d1, @d2)) + ROUND(CONVERT(FLOAT, DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, @d1, @d2), @d1), @d2) % 30)/30, 1) 

这产生了:

8.3 

该公式考虑到2008年间“ -04-13'和'2008-11-05',DATEDIFF(mm ...)返回7,但实际上它不是7个月,而是更少。在这个例子中它返回:

6.7 
+0

之前有人问。它是T-SQL。 – Tomalak 2008-10-30 07:44:51