我需要一个SQL查询,它会根据日历增加此查询中的月份。当系统日历更改为新月份时,when
子句中的日期字符串也必须更改:
UPDATE dbo.dim_time
SET last12 =
CASE
WHEN date < '2012-09-01' THEN 'No'
ELSE 'Yes'
END
这个月是date < '2012-09-01'
。
下个月它应自动更改为date < '2012-10-01'
。
答案 0 :(得分:1)
如果你错误地提到了2012而不是2013,那么下面的查询就会这样做。
Update dbo.dim_time
Set last12 =
Case
When date < CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(getdate())-1),getdate()),101)
then 'No'
Else 'Yes'
End
答案 1 :(得分:1)
Update dbo.dim_time
Set last12 =
Case
WHEN date < DATEADD(M,MONTH(GETDATE()),DATEADD(YYYY,YEAR(GETDATE())-2000,'12-01-1999'))
then 'No'
Else 'Yes'
End
答案 2 :(得分:1)
使用DATEDIFF
Update dbo.dim_time
Set last12 = Case When DateDiff(m,date,getdate())>12 then 'No' Else 'Yes' End
答案 3 :(得分:1)
如果您使用的是MS SQL Server 2012,则可以使用以下功能构建日期
例如
Update dbo.dim_time
Set last12 =
Case
When date < DATEFROMPARTS(year(getdate())-1, month(getdate()),1) then 'No'
Else 'Yes'
End
答案 4 :(得分:1)
试试这个SQL
UPDATE dbo.dim_time
SET last12 =
CASE
WHEN DATE < cast(CAST(Year(getdate()) as NVARCHAR(10)) + '-' + CAST(Month(getdate())as NVARCHAR(10)) +'-01' as Date)
THEN 'No'
Else 'Yes'
END
答案 5 :(得分:1)
我认为你可能更好地使用计算列,这样你就不需要每个月都继续更新。
create table #DimDate
([date] Date, last12 varchar(5))
INSERT INTO #DimDate
SELECT dateAdd(m, X.c, getdate()), 'No'
FROM
(Values (-1),(-2),(-3),(-4),(-5),(-6),(-7),(-8),(-9),(-10),(-11),(-12),(-13),(-14),(-15),(-16)) AS X(c)
ALTER TABLE #DimDate
DROP COLUMN last12
ALTER TABLE #DimDate
ADD last12 AS Case When DateDiff(m,date,getdate())>12 then 'No' Else 'Yes' End
SELECT *
FROM #DimDate
答案 6 :(得分:1)
您需要用表达式替换日期字符串。此表达式将为您提供当月的第一天:
dateadd(month, datediff(month,0,GETDATE()), 0)
由于2012-09-01是从本月开始的34个月前,您可以在当月开始之前计算30个月:
dateadd(month, datediff(month,0,GETDATE()) - 34, 0)
所以你的更新声明是:
Update dbo.dim_time
Set last12 =
Case When date < dateadd(month, datediff(month,0,GETDATE()) - 34, 0) then
'No'
Else
'Yes'
End
答案 7 :(得分:0)
使用GetDate()
...当前月份的日期将会到来..从比较您的字段值,如果为真,则更改其他保持不变..