如何通过添加CONDITIONAL子句来修改我的T-SQL UPDATE查询?

时间:2015-07-23 10:27:19

标签: sql-server sql-update

我正在使用SQL Server 2014,我有一个UPDATE查询,该查询在名为" ResStayDate"的表上运行。 (如下所示):

ID      StayDate        RateAmount
-----------------------------------
256     2015-11-28      248.00
256     2015-11-29      248.00
256     2015-11-30      248.00
256     2015-12-01        0.00
256     2015-12-02        0.00
256     2015-12-03        0.00

我需要更新RateAmount列,我的UPDATE查询如下:

USE MyDatabase

UPDATE ResStayDate
SET RateAmount = CASE ResID
                    WHEN 256 THEN 155.00
                    ELSE RateAmount
                 END

我的问题是,如果我运行此查询"按原样#34;,它将使用155.00更新所有行。我只需要更新2015年12月StayDate所在的行。

输出应该是这样的:

     ID      StayDate      RateAmount
    ---------------------------------
    256     2015-11-28      248.00
    256     2015-11-29      248.00
    256     2015-11-30      248.00
    256     2015-12-01      155.00
    256     2015-12-02      155.00
    256     2015-12-03      155.00

如何修改我的查询,使其仅更新ResStayDate表的那一部分?

2 个答案:

答案 0 :(得分:1)

UPDATE ResStayDate
SET RateAmount = 155
WHERE ID=256 and StayDate between '2015-12-1' and '2015-12-31'

这限制了您对上述条件适用的记录的更新。 SQL很容易以这种方式阅读 - 不需要太多解释; - )。

修改

我在发布第一个版本后才阅读你的时间限制......

答案 1 :(得分:1)

如果您特别想要在12月影响记录,请使用DATEPART功能:

USE MyDatabase

UPDATE ResStayDate

SET RateAmount = CASE WHEN ResID = 256 and DATEPART(MONTH,StayDate) = 12 THEN 155.00

ELSE RateAmount

END