dee*_*dee 4 sql oracle sql-update
我一直在构建一个相当简单的更新语句,其中包含一个嵌套的case语句来确定更新值.列描述与nvarchar(32)相同.对于这两个字段.
代码如下
UPDATE TableA t
SET t.Last_Col =
( CASE WHEN t.First_Col = 'ItemOne'
THEN 'anItemOne'
WHEN t.First_Col = 'ItemTwo'
THEN CASE WHEN t.Second_Col = 'ItemTwo_A'
THEN 'aSecondItem_A'
ELSE 'aSecondItem'
END
ELSE 'NoItem'
END
);
Run Code Online (Sandbox Code Playgroud)
该代码有效但当我尝试使用t.First_Col代替字符串'NoItem'时,我得到的字符集不匹配.
ELSE t.First_Col
END
);
Run Code Online (Sandbox Code Playgroud)
不起作用.t.First_Col和t.Last_Col都是nvarchar2(32)并且我一直在尝试使用我认为不应该需要的演员.
ELSE CAST(t.First_Col AS NVARCHAR2(32))
END );
Run Code Online (Sandbox Code Playgroud)
任何提示或建议都非常感谢.一如既往地提前感谢.
case语句的类型由其中的第一个子句决定.在这种情况下,第一个子句是varchar字符串而不是nvarchar.
试试这个:
UPDATE TableA t
SET t.Last_Col = (CASE WHEN t.First_Col = N'ItemOne'
THEN N'anItemOne'
WHEN t.First_Col = N'ItemTwo'
THEN (CASE WHEN t.Second_Col = N'ItemTwo_A'
THEN N'aSecondItem_A'
ELSE N'aSecondItem'
END)
ELSE N'NoItem'
END );
Run Code Online (Sandbox Code Playgroud)