DATEDIFF获得上个月

时间:2011-02-12 09:40:01

标签: sql sql-server

我希望相对于当前日期获得上个月

  

SELECT datediff(mm,-1,2-2-2011)

此查询提供 67 ,这是一个错误的值..我哪里出错了?

6 个答案:

答案 0 :(得分:15)

您可以使用 DATEADD

例如

SELECT DATEADD(month, -1, GETDATE())

答案 1 :(得分:7)

2-2-2011不是有效的日期字面值 - 您从结果中减去2,然后从结果中减去2011年 - 正确的日期文字为'2-2-2011'#2-2-2011#。您可以使用GETDATE()获取当前日期,而不是依赖文字。

你也不应该使用DATEDIFF - 它会在日期之间为你提供差异

您应该使用DATEADD来计算新日期。

试试这个:

SELECT DATEADD(mm,-1, GETDATE())

这将是一个月前的日期。

如果您只想要,则还需要使用DATEPART

SELECT DATEPART(mm, SELECT DATEADD(mm,-1, GETDATE()))

答案 2 :(得分:4)

SELECT datepart(mm, dateadd(mm,-1,'2011/1/1') )

答案 3 :(得分:2)

如果您想要当月之前的月份,则需要
SELECT MONTH(DATEADD(mm, -1, GETDATE()))

如果您想要在当前日期之前一个月的日期,则需要
SELECT DATEADD(mm, -1, GETDATE())

BTW,SELECT datediff(mm,-1,2-2-2011)计算第-1天和第-2011天之间的月数,即67(2010/30)。那远不及你真正想要的那样。

答案 4 :(得分:1)

您需要使用 DATEADD - 而不是DATEDIFF

DATEDIFF计算两个日期之间的差异 - 它不会将日期或月份添加到现有日期....

此外,您需要将日期设为单引号:使用'2-2-2011'而不是简单地2-2-2011

最后:我强烈建议使用 ISO-8601 日期格式 YYYYMMDD (此处:20110202) - 无论语言和语言如何,它都能正常运行SQL Server上的区域设置 - 由于语言设置,您的日期格式将在许多服务器上BREAK。

答案 5 :(得分:0)

DATEDIFF计算开始日期和结束日期之间的差额 当前日期之前的每个日期都有一个正数,当前日期之后的每个日期都有一个负数,这可以使您的特定日期经过一天,月,年或小时的天气,以便更好地理解这一点。下面是datediff的语法

DATEDIFF (your datetime type, your starting date,your ending date)

该函数执行(your ending date)-(your starting date)

在您的情况下,下面的datediff将完全正常工作

SELECT DATEDIFF (month,[you_date_or_datetime_column],GETDATE()) = 1