0

我有TABLE1with columns COL1,在 Oracle 中COL2定义。LongVarChar

每次用户将记录加载到 TABLE1 时,COL1 将具有旧值,COL2 将具有旧值 + 新值。IE

例如:

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"

但是有没有人有更好的想法或如何做到这一点?

非常感谢

4

1 回答 1

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;

结果是“球”


但是,如果您实际上是在谈论CLOB数据类型,请替换:

dbms_lob.substr( colX, 4000, 1) 

而不是 colX(其中 X 是 1 或 2)

[This will give you the first 4000 bytes of the CLOB - in order to get more, you'd have to use PL/SQL]

于 2012-11-27T22:37:45.020 回答