如何在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]
运行上面的代码生成以下输出:
注意: 请注意,今天的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**