【问题标题】:How to use CASE/WHEN in DB2 by using insert in a stored procedure?如何通过在存储过程中使用插入在 DB2 中使用 CASE/WHEN?
【发布时间】:2019-02-05 12:34:13
【问题描述】:

我有一个用于 DB2 的存储过程,我想在其中填写一个名为 SEASON 的字段,其中 W 代表冬季,S 代表夏季。程序已完成,但我无法处理逻辑。有人可以告诉我这是如何工作的吗?

这适用于数据仓库中的维度表。

INSERT into ABC.TIME_DIMEMSION ( DATE, SEASON, QUERTER) VALUES( DATE(myDate), CASE WHEN MONTH(myDate) = 1 THEN SET SEASON= 'W'; WHEN MONTH(myDate) = 2 THEN SET SEASON= 'W'; WHEN MONTH(myDate) = 2 THEN SET SEASON= 'S'; ELSE SET SEASON= 'X'; END CASE. QUARTER(loaddate));

我遇到了一个错误

【问题讨论】:

    标签: stored-procedures db2 switch-statement


    【解决方案1】:

    查看CASE expression 的描述,您可以在其他语句中使用它。

    它不同于Case Statement

    在您的情况下,您必须使用CASE expression

    INSERT into ABC.TIME_DIMEMSION (
        DATE,
        SEASON,
        QUERTER)
    VALUES(
        DATE(myDate),
        CASE MONTH(myDate)
          WHEN 1 THEN 'X'
          WHEN 2 THEN 'Y'
                 ELSE 'Z'
        END,
        QUARTER(loaddate)
    );
    
    -- or
    
    INSERT into ABC.TIME_DIMEMSION (
        DATE,
        SEASON,
        QUERTER)
    VALUES(
        DATE(current timestamp),
        CASE 
          WHEN MONTH(current timestamp)=1 THEN 'X'
          WHEN MONTH(current timestamp)=2 THEN 'Y'
                                          ELSE 'Z'
        END,
        QUARTER(current timestamp)
    );
    

    【讨论】:

      【解决方案2】:

      在存储过程中执行此操作的一种方法(还有其他方法):

      注意:表列名不要使用保留字!

          declare v_season varchar(10);
          declare v_themonth integer;
          set v_themonth = month(somedate);
      
          set v_season = case when  v_themonth  in (12,1,2) then 'Winter'
              when v_themonth in (3,4,5) then 'Spring'
              when v_themonth in (6,7,8) then 'Summer'
              when v_themonth in (9,10,11) then 'Autumn'
              end;
          insert into abc.time_dimension( thedate, season) 
          values ( somedate, v_theseason);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2011-05-19
        • 2021-06-01
        • 2019-05-09
        • 1970-01-01
        • 2011-03-18
        相关资源
        最近更新 更多