我认为这是相当微不足道的,但我迷失了方向..
SQL、Oracle 11 - 一个简单的语句:
INSERT INTO NEW_TABLE (A, B, NEW_LENGTH)
SELECT
A, B, OLD_LENGTH
FROM
OLD_TABLE
在“old_length”中,我的值从“-100到100”,但在“new_length”中,值限制在“-50到50”。一个简单的“插入”会给出错误“值对于列来说太大”,所以我必须仅使用允许的值。太大的值应替换为 null。
有没有简单的方法可以实现?我尝试使用 NVL2 和 DECODE,但只出现一些语法错误。
提前感谢您的建议!
您可以使用 case 表达式:
INSERT INTO NEW_TABLE (A, B, NEW_LENGTH)
SELECT
A, B,
CASE WHEN OLD_LENGTH >= -50 AND OLD_LENGTH <= 50 THEN OLD_LENGTH END
FROM
OLD_TABLE
如果您没有指定自己的 `ELSE 值,则 case 表达式具有隐式
ELSE NULL
,但为了完整性,您可能更愿意包含该值。