我想计算2个日期的月份差异,这将导致浮动值。
示例:
DATE1 = '4/23/2008' 的 DATE2 = '12 / 31 / 2008' 的
将是7.y个月。我想找到y值。谁能给我一个公式来在sql代码中做这个? TNX ..
答案 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