我有一个用于DB2的存储过程,我想在其中用W表示冬季,S表示夏季,填充一个名为SEASON的字段。该过程已完成,但我无法处理逻辑。有人可以告诉我这是如何工作的吗?
这是用于数据仓库中的维表的。
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));
我遇到错误
答案 0 :(得分:1)
在存储过程中执行此操作的一种方法(还有其他方法):
注意:请勿为表列名使用保留字!
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);
答案 1 :(得分: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)
);