我的TABLE1
列COL1
,COL2
在Oracle中定义为LongVarChar
。
每次用户将记录加载到TABLE1时,COL1将具有旧值,COL2将具有旧值+新值。即。
例如:
COL1 COL2
Bat
Bat Bat Ball
Bat Ball Bat Ball Wicket
Bat Ball Wicket Bat Ball Wicket Stump
要获得唯一的新值,我打算从COL1内容中删除COL2的内容..我认为这是一个非常糟糕的主意..
我尝试了通常的“ - ”运算符,它说"Expected Numeric but received CLOB"
但是,任何人都有更好的想法或如何实现这个目标吗?
非常感谢
答案 0 :(得分:2)
假设您的意思是Varchar2,并且(如您的示例所示),每个旧值由一个额外的空格分隔,那么这样的东西应该有效:
SELECT SUBSTR(col2, NVL(LENGTH(col1)+2,0)) "New Value" FROM TABLE1
例如:
select substr('Bat', nvl(length(null)+2,0)) from dual;
导致'蝙蝠'
select substr('Bat Ball', nvl(length('Bat')+2,0)) from dual;
导致'Ball'
但是,如果您实际上在谈论的是CLOB
数据类型,那么请替换:
dbms_lob.substr( colX, 4000, 1)
而不是colX(其中X是1或2)
[这将为您提供CLOB的前4000个字节 - 为了获得更多,您必须使用PL / SQL]