Как сделать разницу от гггг / мм по месяцам? - PullRequest
0 голосов
/ 14 июня 2011

У меня есть столбец с именем [date], и данные в этом столбце выглядят примерно так:

[date]

2011/01
2011/02
2011/03
2011/04
2011/05
2011/06
2011/07
2011/08
2011/09
2011/10

Мой полный сценарий состоит в том, что я создал столбец с именем [date], и я выгружаю данные в этот столбец из другого столбца с именем [fiscal_month] (оба из одной таблицы).

Мне нужно извлечь последние 9 месяцев данных из этого столбца [date], и я написал этот код:

SELECT TOP 9 REPLACE (P.[Fiscal Month],'M','/') as [date],
      P.[Fiscal Month] AS [Fiscal Month] FROM [OR].[Report].[SD_P] P 
WHERE [date] <= CONVERT(char(7), GETDATE(), 111) ORDER BY [date] DESC 

Столбец [fiscal_month] - это VARCHAR (100).

Данные в столбце [fiscal_month] выглядят примерно так:

2011M01,2011M02, 2011M03, 2011M04, 2011M05
и т. Д.

Обновление:

Я изменил столбец [date] и назначил для этого столбца тип данных datetime, а затем выбрал его с заменой «M» из другого столбца на «/», чтобы получить последние 9 месяцев данные ..

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Я предполагаю, что столбец date на самом деле хранится в виде текста. Если это так, самое простое решение - преобразовать его в дату и время, а затем сравнить:

Select ...
From MyTable
Where Cast(Replace([Date],'/','') + '01' As DateTime)
    > DateAdd(m, -9
         , DateAdd(d
             , -Day(GetDate())
             , DateAdd(d, DateDiff(d, 0, GetDate() ), 0)))

Следующий фрагмент кода используется для удаления части времени из сегодняшней даты:

DateAdd( d, DateDiff(d, 0, GetDate() ), 0 )

Обновление

Учитывая ваше дополнение, вам нужно лишь небольшое изменение запроса выше:

Select ...
From MyTable
Where Cast(Replace([Date],'M','') + '01' As DateTime)
    > DateAdd(m, -9
         , DateAdd(d
             , -Day(GetDate())
             , DateAdd(d, DateDiff(d, 0, GetDate() ), 0)))

Обновление

Учитывая, что вы теперь преобразовали столбец date в datetime, вы можете упростить свой запрос:

Select ...
From MyTable
Where [Date] > DateAdd(m, -9, DateAdd(d
                               , -Day(GetDate())
                               , DateAdd(d, DateDiff(d, 0, GetDate() ), 0)))
2 голосов
/ 15 июня 2011
SELECT TOP 9 [date]
FROM Mytable
WHERE [date] <= CONVERT(char(7),DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1), 111)
ORDER BY [date] DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...