Как получить первый и последний день предыдущего месяца (с отметкой времени) в SQL Server

Я не мог найти решение, которое дает первый и последний день предыдущего месяца с меткой времени. Надеюсь, это поможет другим. Если уже есть решение этой проблемы, я извиняюсь.

Вот решение.

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'

результат: 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) 

В этом примере Works Only Only – 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 

Для более подробной информации нажмите здесь

Решение

Формат даты, который вы запросили, называется форматом 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

Примечание: Имейте в виду, что сегодняшняя дата для меня – 12 сентября 2016 года .

Подробнее (для полноты)

Общие параметры даты

Остались ли вы больше?

Чтобы настроить более широкий диапазон удобных параметров, связанных с датой, включите следующее в свой 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]; 

Выполните приведенный выше код, чтобы получить следующий результат:

введите описание изображения здесь

Если ваша страна отсутствует, то это потому, что я не знаю кода для нее. Было бы очень полезно и полезно, если бы вы могли отредактировать этот ответ и добавить новый столбец для своей страны.

Заранее спасибо.

Примечание: Имейте в виду, что сегодняшняя дата для меня – 12 сентября 2016 года .

Рекомендации

Для дальнейшего ознакомления с международным стандартом даты ISO8601, перейдите по этой ссылке:

Для дальнейшего ознакомления с международным стандартом даты ODBC, перейдите по этой ссылке:

Чтобы просмотреть список форматов даты, с которыми я работал, перейдите по этой ссылке:

Для дальнейшего чтения по типу данных DATETIME перейдите по этой ссылке:

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

Из SQL2012 появилась новая функция, называемая EOMONTH . Используя эту функцию, можно легко найти первый и последний день месяца.

 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-е число месяца, например «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'); 

Вот довольно прямой и динамичный путь. В последний день прошлого месяца вычтите текущий день с сегодняшней даты. Для первого дня последнего месяца используйте тот же код, просто повторите вычитание числового дня из предыдущего результата и добавьте 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 

Я еще не видел этого решения; это мое предпочтение, потому что это более простая читаемость:

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** 
  • datetime в C # vs, SQL и GETDATE () из SQL Server
  • Возврат таблицы дат расчета из хранимой процедуры SQL
  • Как использовать GETDATE () SQL Server при отключении системного времени?
  • Timestamp # equals () не работает, если Timestamp отображается в / из базы данных
  • Дата между указанными датами в sql-сервере с нулевым значением
  • Преобразование ошибок varchar datetime
  • Как вернуть несколько значений из хранимой процедуры в запросе tsql
  • Все данные, хранящиеся в utc
  • SQL Server: ограничьте SELECT только для получения данных за последние 4 недели / 1 месяц
  • Как преобразовать dateformat из SQL Server в MySQL
  • SQL Server - строка даты
  • Давайте будем гением компьютера.