我在执行Datawarehouse转换任务时遇到一些困难,我有一些以varchar格式输入的源列,其中包含的数据为:空白,-,十进制数字(例如(1234.44))。
target中的那些列被声明为number。
我正在尝试使用此代码处理该数据,但我一直收到无效的数字错误:
CASE WHEN
LENGTH(TRIM(TRANSLATE(column78input, '-', ' '))) is null then null
WHEN column78input IS NULL THEN 0
else to_number(column78input)
END
在第一个when语句中,我试图检查-在源代码中,找到后返回null,如果找到它,则将其放置为null(本质上将破折号替换为null)
第二秒,当我试图处理这些空格时,我认为它们可能会导致错误
最后在else语句中,我想将其从varchar解析为要加载到目标表中的数字。
如果有人有某种建议,请帮忙!
谢谢
答案 0 :(得分:0)
尝试
CASE
WHEN INSTR(column78input, '-') > 0 OR column78input IS NULL THEN 0
ELSE TO_NUMBER(REPLACE(column78input, ' '))
END
INSTR返回字符串中字符的第一个位置。因此,如果没有破折号,它将返回0。大于0的值表示字符串中至少有一个破折号。
以下是您的代码中的一些错误:
column78input IS NULL