我试图检索两个日期的月份差,但似乎找不到获得准确月份的方法。
以下是我到目前为止尝试的查询:
SELECT DATEDIFF(month,convert(datetime, '11/05/2015'), convert(datetime, '12/06/2015')) - 1
这将导致0,这是错误的,当我使用另一个日期时:
SELECT DATEDIFF(month,convert(datetime, '12/31/2015'), convert(datetime, '01/01/2016')) - 1
这将产生正确的0。
还必须考虑闰年。
4条答案
按热度按时间8gsdolmq1#
TSQL会返回您所编写的正确结果。它会采用指定的两个日期之间的月份差。
11月和12月之间的月差是“1”。
但是,如果您希望每30天的差异为1个月,则需要重写查询:
如果将一个月中的天数定义为30,则此方法有效。
unftdfkk2#
这里有一种方法可以直观地显示
DATEDIFF(month, ...)
正在做什么。想象一个挂在墙上的月历。对于这个特定的SQL函数来说,两个日期之间的“月数”是指从一个日期转到下一个日期所需的页数。每个月有多少天或者是否是闰年都无关紧要。你不是第一个对内置函数的行为感到困惑的人。如果你需要用一种不同的方法来计算月份,那么你就需要描述你想要完成的具体任务。一旦你定义了需要解决的问题,很可能就很容易创建一个解决方案。
kkbh8khc3#
在T-SQL中,您可以使用CASE:
它返回1(正确)和:
返回0,表示正确。
ibrsph3r4#