需要帮助在SQL中将If / then转换为CASE

时间:2014-04-24 12:23:56

标签: sql tsql case

我在掌握使用CASE语句时遇到了一些麻烦(习惯使用If / Then)。我想将其转换为CASE格式:

If DATEPART(Month,Datetime) = 04
       Then UPDATE DB1
       SET column1 = (SELECT Value FROM DB2)

因此,如果当前日期时间的月份与4(4月)匹配,则使用DB2的Value列中的值更新DB1的column1。这看起来如何使用CASE?

3 个答案:

答案 0 :(得分:2)

我不清楚case与此有什么关系。 case语句通常用于select来执行条件语句。您的update似乎更像是:

update db1
    set column1 = db2.value
    from db1 join
         db2
         on db1.foo = db2.bar
    where DATEPART(Month, db1.Datetime) = 4;

但是从你的问题中判断出你真正想做的事情有点难以理解。

编辑:(回应评论)

对于今天的日期,where子句应为:

where datepart(month, getdate()) = 4

您可以使用where

代替if (datepart(month, getdate()) = 4) . . .

需要join(或子查询),因为问题涉及两个表。

答案 1 :(得分:0)

IF ((SELECT DATEPART(MONTH, GetDate())) = 04)
  UPDATE
    db1
  SET
    column1 = db2.value
  FROM
    db2
  WHERE
    db1.key = db2.key

DATEPART()嵌入在SELECT中,()本身包含在WHERE中。

需要THEN子句来指定db2中的哪些行用于更新db1中的哪些行。

在T-SQL中没有{{1}}。有关详细信息,请参阅here

答案 2 :(得分:0)

我认为您的查询没有相同的CASE声明。

MSDN

中查看CASE快递
  

评估条件列表并返回多个可能的结果表达式之一。

您的查询是一个条件UPDATE操作,它不会返回任何内容。你能在这里澄清你的意图吗?