我希望相对于当前日期获得上个月
SELECT datediff(mm,-1,2-2-2011)
此查询提供 67 ,这是一个错误的值..我哪里出错了?
答案 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