如何自动更改月份输入

时间:2013-09-23 10:33:26

标签: sql sql-server parameters

我需要一个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'

8 个答案:

答案 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,则可以使用以下功能构建日期

  • DateFromParts - 返回指定年,月和日的日期值。
  • GetDate - 返回当前的DateTime
  • Month - 返回DateTime的月份部分
  • Year - 返回DateTime的年份部分

例如

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() ...当前月份的日期将会到来..从比较您的字段值,如果为真,则更改其他保持不变..