问题描述
|
我有一列称为“ 0”,该列中的数据是这样的:
[date]
2011/01
2011/02
2011/03
2011/04
2011/05
2011/06
2011/07
2011/08
2011/09
2011/10
我的完整情况是,我创建了一个名为ѭ0column的列,并将数据从另一个名为ѭ3column的列中转储到该列(两者均来自同一表)。
我必须从那个“ 0”列中检索最近9个月的数据,并且我编写了以下代码:
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
“ 3”列为VARCHAR(100)。
[fiscal_month]
列中的数据如下所示:
2011M01、2011M02、2011M03、2011M04、2011M05等
更新:
我更改了[date]
列,并为该列分配了datetime
数据类型,然后从另一列中以\'/ \'替换\'M \'以进行选择,以获取9个月的最新数据。
解决方法
我假设
date
列实际上存储为文本。如果是这种情况,最简单的解决方案是将其转换为日期时间,然后进行比较:
Select ...
From MyTable
Where Cast(Replace([Date],\'/\',\'\') + \'01\' As DateTime)
> DateAdd(m,-9,DateAdd(d,-Day(GetDate()),DateDiff(d,GetDate() ),0)))
以下代码段用于从今天的日期中剥离时间部分:
DateAdd( d,0 )
更新资料
根据您的添加,您只需要对上面的查询进行少量更改:
Select ...
From MyTable
Where Cast(Replace([Date],\'M\',0)))
更新资料
既然您现在已将date
列转换为datetime
,则可以简化查询:
Select ...
From MyTable
Where [Date] > DateAdd(m,0)))
, SELECT TOP 9 [date]
FROM Mytable
WHERE [date] <= CONVERT(char(7),DATEADD(month,DATEDIFF(month,GETDATE()),-1),111)
ORDER BY [date] DESC