SQL:每月计算一次

时间:2008-10-30 07:07:06

标签: sql

我想计算2个日期的月份差异,这将导致浮动值。

示例:

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

将是7.y个月。我想找到y值。谁能给我一个公式来在sql代码中做这个? TNX ..

3 个答案:

答案 0 :(得分:1)

没有标准的sql可以普遍处理这个问题。这取决于您使用的数据库。基本上,您需要将两个日期字符串转换为数据库引擎在内部使用的日期格式,并减去两个日期,减法的结果将再次依赖。在Oracle中,您使用to_date()进行转换,减法的结果将是一个表示天数的浮点数。

简而言之,在db的手册中搜索有关日期处理或数据类型的部分。

答案 1 :(得分: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,但实际上它不是七个月,而是更少。在此示例中,它返回:

6.7

答案 2 :(得分:0)

Sql Server的近似结果;

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