如何在SQL Server中获得前一个月(带时间戳)的第一天和最后一天

我无法find上个月的第一天和最后一天给出时间戳的解决scheme。 希望这可以帮助别人。 如果已经有这个问题的解决scheme,我很抱歉。

这是解决scheme。

SELECT DATEADD(month, DATEDIFF(month, -1, getdate()) - 2, 0) as FirtDayPreviousMonthWithTimeStamp, DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) as LastDayPreviousMonthWithTimeStamp 

如果currentdate = '2012-7-31'这将返回以下内容currentdate = '2012-7-31'

结果: 2012-06-01 00:00:00.000 2012-06-30 23:59:59.000

如果currentdate = '2012-1-1'这将返回以下内容

结果: 2011-12-01 00:00:00.000 2011-12-31 23:59:59.000

 select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) --First day of previous month select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) --Last Day of previous month 

本周的第一天。

 select CONVERT(varchar,dateadd(week,datediff(week,0,getdate()),0),106) 

本周的最后一天。

 select CONVERT(varchar,dateadd(week,datediff(week,0,getdate()),6),106) 

上周的第一天。

 select CONVERT(varchar,DATEADD(week,datediff(week,7,getdate()),0),106) 

上周的最后一天。

 select CONVERT(varchar,dateadd(week,datediff(week,7,getdate()),6),106) 

下周的第一天。

 select CONVERT(varchar,dateadd(week,datediff(week,0,getdate()),7),106) 

下周的最后一天。

 select CONVERT(varchar,dateadd(week,datediff(week,0,getdate()),13),106) 

本月第一天。

 select CONVERT(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 

本月最后一天。

 select CONVERT(varchar,dateadd(d,-(day(dateadd(m,1,getdate()))),dateadd(m,1,getdate())),106) 

在这个例子中只有在date是31,其余的日子不是。

上个月的第一天。

 select CONVERT(varchar,dateadd(d,-(day(dateadd(m,-1,getdate()-2))),dateadd(m,-1,getdate()-1)),106) 

上个月的最后一天。

 select CONVERT(varchar,dateadd(d,-(day(getdate())),getdate()),106) 

下个月的第一天。

 select CONVERT(varchar,dateadd(d,-(day(dateadd(m,1,getdate()-1))),dateadd(m,1,getdate())),106) 

下个月的最后一天。

 select CONVERT(varchar,dateadd(d,-(day(dateadd(m,2,getdate()))),DATEADD(m,2,getdate())),106) 

今年的第一天。

 select CONVERT(varchar,dateadd(year,datediff(year,0,getdate()),0),106) 

今年的最后一天。

 select CONVERT(varchar,dateadd(ms,-2,dateadd(year,0,dateadd(year,datediff(year,0,getdate())+1,0))),106) 

去年的第一天。

 select CONVERT(varchar,dateadd(year,datediff(year,0,getdate())-1,0),106) 

去年的最后一天。

 select CONVERT(varchar,dateadd(ms,-2,dateadd(year,0,dateadd(year,datediff(year,0,getdate()),0))),106) 

明年的第一天。

 select CONVERT(varchar,dateadd(YEAR,DATEDIFF(year,0,getdate())+1,0),106) 

明年的最后一天。

 select CONVERT(varchar,dateadd(ms,-2,dateadd(year,0,dateadd(year,datediff(year,0,getdate())+2,0))),106) 
 SELECT CONVERT(DATE,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-1, 0)) AS FirstDayOfPrevMonth SELECT CONVERT(DATE,DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) , 0))) AS LastDayOfPrevMonth 

欲了解更多详情请点击这里

 SELECT DATEADD(m,DATEDIFF(m,0,GETDATE())-1,0) AS PreviousMonthStart SELECT DATEADD(ms,-2,DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)) AS PreviousMonthEnd 

您请求的date格式称为ODBC格式(代码120 )。

要真正计算您请求的值,请在SQL中包含以下内容。

复制粘贴…

 DECLARE @FirstDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, -1, GETDATE() - 2)) ), DATEADD(m, -1, GETDATE() - 1))) , @LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE())) 

…并在你的代码中使用:

  • @FirstDayOfLastMonth
  • @LastDayOfLastMonth

请注意,它必须早于任何引用参数的语句粘贴,但是从这一点上,您可以在代码中引用@FirstDayOfLastMonth@LastDayOfLastMonth

让我们看看一些实际的代码:

 DECLARE @FirstDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, -1, GETDATE() - 2)) ), DATEADD(m, -1, GETDATE() - 1))) , @LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE())) SELECT 'First day of last month' AS Title, CONVERT(VARCHAR, @FirstDayOfLastMonth , 120) AS [ODBC] UNION SELECT 'Last day of last month' AS Title, CONVERT(VARCHAR, @LastDayOfLastMonth , 120) AS [ODBC] 

运行上面的代码生成以下输出:

图a

注意: 请注意,今天的date是2016年9月12日

更多(为了完整起见)

通用date参数

你还想要更多吗?

要设置更全面的方便date相关参数,请在SQL中包含以下内容:

 DECLARE @FirstDayOfCurrentWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)) , @LastDayOfCurrentWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 6)) , @FirstDayOfLastWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 7, GETDATE()), 0)) , @LastDayOfLastWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 7, GETDATE()), 6)) , @FirstDayOfNextWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 7)) , @LastDayOfNextWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 13)) , @FirstDayOfCurrentMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE() - 1) ), GETDATE())) , @LastDayOfCurrentMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 1, GETDATE())) ), DATEADD(m, 1, GETDATE()))) , @FirstDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, -1, GETDATE() - 2)) ), DATEADD(m, -1, GETDATE() - 1))) , @LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE())) , @FirstDayOfNextMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 1, GETDATE() - 1)) ), DATEADD(m, 1, GETDATE()))) , @LastDayOfNextMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 2, GETDATE())) ), DATEADD(m, 2, GETDATE()))) , @FirstDayOfCurrentYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)) , @LastDayOfCurrentYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)))) , @FirstDayOfLastYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0)) , @LastDayOfLastYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)))) , @FirstDayOfNextYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) , @LastDayOfNextYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 2, 0)))) 

将它包含在最早是最有意义的,最好是在过程或SQL查询的顶部。

一旦声明,参数可以在代码中的任何地方被引用,只要你需要它们。

让我们看看一些实际的代码:

 DECLARE @FirstDayOfCurrentWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)) , @LastDayOfCurrentWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 6)) , @FirstDayOfLastWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 7, GETDATE()), 0)) , @LastDayOfLastWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 7, GETDATE()), 6)) , @FirstDayOfNextWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 7)) , @LastDayOfNextWeek DATETIME = CONVERT(DATE, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 13)) , @FirstDayOfCurrentMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE() - 1) ), GETDATE())) , @LastDayOfCurrentMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 1, GETDATE())) ), DATEADD(m, 1, GETDATE()))) , @FirstDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, -1, GETDATE() - 2)) ), DATEADD(m, -1, GETDATE() - 1))) , @LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE())) , @FirstDayOfNextMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 1, GETDATE() - 1)) ), DATEADD(m, 1, GETDATE()))) , @LastDayOfNextMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, 2, GETDATE())) ), DATEADD(m, 2, GETDATE()))) , @FirstDayOfCurrentYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)) , @LastDayOfCurrentYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)))) , @FirstDayOfLastYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0)) , @LastDayOfLastYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)))) , @FirstDayOfNextYear DATETIME = CONVERT(DATE, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) , @LastDayOfNextYear DATETIME = CONVERT(DATE, DATEADD(ms, -2, DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 2, 0)))) SELECT 'a) FirstDayOfCurrentWeek.' AS [Title] , @FirstDayOfCurrentWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfCurrentWeek, 120) AS [ODBC] UNION SELECT 'b) LastDayOfCurrentWeek.' AS [Title] , @LastDayOfCurrentWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfCurrentWeek, 120) AS [ODBC] UNION SELECT 'c) FirstDayOfLastWeek.' AS [Title] , @FirstDayOfLastWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfLastWeek, 120) AS [ODBC] UNION SELECT 'd) LastDayOfLastWeek.' AS [Title] , @LastDayOfLastWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfLastWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfLastWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfLastWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfLastWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfLastWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfLastWeek, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfLastWeek, 120) AS [ODBC] UNION SELECT 'e) FirstDayOfNextWeek.' AS [Title] , @FirstDayOfNextWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfNextWeek, 120) AS [ODBC] UNION SELECT 'f) LastDayOfNextWeek.' AS [Title] , @LastDayOfNextWeek AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfNextWeek, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfNextWeek, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfNextWeek, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfNextWeek, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfNextWeek, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfNextWeek, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfNextWeek, 120) AS [ODBC] UNION SELECT 'g) FirstDayOfCurrentMonth.' AS [Title] , @FirstDayOfCurrentMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfCurrentMonth, 120) AS [ODBC] UNION SELECT 'h) LastDayOfCurrentMonth.' AS [Title] , @LastDayOfCurrentMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfCurrentMonth, 120) AS [ODBC] UNION SELECT 'i) FirstDayOfLastMonth.' AS [Title] , @FirstDayOfLastMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfLastMonth, 120) AS [ODBC] UNION SELECT 'j) LastDayOfLastMonth.' AS [Title] , @LastDayOfLastMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfLastMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfLastMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfLastMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfLastMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfLastMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfLastMonth, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfLastMonth, 120) AS [ODBC] UNION SELECT 'k) FirstDayOfNextMonth.' AS [Title] , @FirstDayOfNextMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfNextMonth, 120) AS [ODBC] UNION SELECT 'l) LastDayOfNextMonth.' AS [Title] , @LastDayOfNextMonth AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfNextMonth, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfNextMonth, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfNextMonth, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfNextMonth, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfNextMonth, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfNextMonth, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfNextMonth, 120) AS [ODBC] UNION SELECT 'm) FirstDayOfCurrentYear.' AS [Title] , @FirstDayOfCurrentYear AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfCurrentYear, 120) AS [ODBC] UNION SELECT 'n) LastDayOfCurrentYear.' AS [Title] , @LastDayOfCurrentYear AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfCurrentYear, 120) AS [ODBC] UNION SELECT 'o) FirstDayOfLastYear.' AS [Title] , @FirstDayOfLastYear AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfLastYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfLastYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfLastYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfLastYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfLastYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfLastYear, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfLastYear, 120) AS [ODBC] UNION SELECT 'p) LastDayOfLastYear.' AS [Title] , @LastDayOfLastYear AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfLastYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfLastYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfLastYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfLastYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfLastYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfLastYear, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfLastYear, 120) AS [ODBC] UNION SELECT 'q) FirstDayOfNextYear.' AS [Title] , @FirstDayOfNextYear AS [DATE (Server default)] , CONVERT(VARCHAR, @FirstDayOfNextYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @FirstDayOfNextYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @FirstDayOfNextYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @FirstDayOfNextYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @FirstDayOfNextYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @FirstDayOfNextYear, 100) AS [US] , CONVERT(VARCHAR, @FirstDayOfNextYear, 120) AS [ODBC] UNION SELECT 'r) LastDayOfNextYear.' AS [Title] , @LastDayOfNextYear AS [DATE (Server default)] , CONVERT(VARCHAR, @LastDayOfNextYear, 127) AS [ISO8601] , CONVERT(VARCHAR, @LastDayOfNextYear, 103) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [British&French] , CONVERT(VARCHAR, @LastDayOfNextYear, 104) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [German] , CONVERT(VARCHAR, @LastDayOfNextYear, 105) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Italian] , CONVERT(VARCHAR, @LastDayOfNextYear, 111) + ' ' + CONVERT(CHAR(5), @FirstDayOfCurrentWeek, 108) AS [Japan] , CONVERT(VARCHAR, @LastDayOfNextYear, 100) AS [US] , CONVERT(VARCHAR, @LastDayOfNextYear, 120) AS [ODBC]; 

运行上面的代码生成以下输出:

在这里输入图像描述

如果你的国家缺less,那是因为我不知道它的代码。 如果你能编辑这个答案,并为你的国家增加一个新栏目,这将是最有帮助和赞赏的。

提前致谢。

注意: 请注意,今天的date是2016年9月12日

参考

欲进一步阅读ISO8601国际date标准,请点击以下链接:

要进一步阅读ODBC国际date标准,请点击以下链接:

要查看我工作的date格式列表,请点击此链接:

要进一步阅读DATETIME数据types,请点击以下链接:

从SQL2012开始,有一个名为EOMONTH的新function。 使用这个function,可以很容易地find月份的第一天和最后一天。

 select DATEADD(DD,1,EOMONTH(Getdate(),-1)) firstdayofmonth, EOMONTH(Getdate()) lastdayofmonth 

我在SSRS报告中使用了以下逻辑。

 BUS_DATE = 17-09-2013 X=DATEADD(MONTH,-1,BUS_DATE) = 17-08-2013 Y=DAY(BUS_DATE)=17 first_date = DATEADD(DAY,-Y+1,X)=01-08-2013 last_date = DATEADD(DAY,-Y,BUS_DATE)=31-08-2013 

取一些月份的第31个基准date,例如“20011231”。 然后使用
以下程序(我已经给出了以下3个相同的例子,只有@ DT值不同)。

 declare @dt datetime; set @dt = '20140312' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); set @dt = '20140208' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); set @dt = '20140405' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); 

这是一个相当直接和dynamic的方式。 在上个月的最后一天,从今天的date减去当前的数字date。 对于上个月的第一天,使用相同的代码,只需重复从前一个结果减去数字date,并添加1。

 declare @PriorEOM as datetime declare @PriorFOM as datetime Set @PriorEOM = dateadd(day,-day(getdate()),getdate()) Set @PriorFOM = dateadd(day,-day(@PriorEOM) + 1,@PriorEOM) Print @PriorEOM Print @PriorFOM 

我还没有看到这个解决scheme, 这是我更喜欢它更简单的可读性:

select dateadd(month,-1,format(getutcdate(),'yyyy-MM-01'))

您可以通过执行在SQL Server中获得上个月(带时间戳)的第一天和最后一天

 --select dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,-1,getdate())) --first day of previous month --select dateadd(dd,-datepart(dd,getdate()),getdate()) -- last day of previous month**