2

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

4

8 回答 8

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
于 2013-09-23T10:35:03.587 回答
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
于 2013-09-23T10:37:46.070 回答
1

利用DATEDIFF

Update dbo.dim_time
Set last12 = Case When DateDiff(m,date,getdate())>12 then 'No' Else 'Yes' End
于 2013-09-23T10:38:07.663 回答
1

如果您使用的是 MS SQL Server 2012,您可以使用以下函数构建日期

  • DateFromParts - 返回指定年、月和日的日期值。
  • GetDate - 返回当前日期时间
  • 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
于 2013-09-23T10:52:54.690 回答
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
于 2013-09-23T10:55:09.623 回答
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
于 2015-06-04T08:45:08.540 回答
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
于 2015-07-02T14:55:29.597 回答
0

使用GetDate()...带有日期的当前月份..从中比较您的字段值,如果为真,则更改否则保持原样..

于 2013-09-23T10:37:48.113 回答