如何在oracle中减去两列Longvarchar

时间:2012-11-27 22:11:40

标签: oracle

我的TABLE1COL1COL2在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"

但是,任何人都有更好的想法或如何实现这个目标吗?

非常感谢

1 个答案:

答案 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]