Oracle 根据另一个字段的值将字符串追加到varchar2字段

Oracle 根据另一个字段的值将字符串追加到varchar2字段,oracle,oracle11g,Oracle,Oracle11g,表1所示为: col1 varchar2(85) col2 date col1中有大量可用的字符空间。如果col2值早于2001,则需要将值OLD附加到col1中任何值的前端 在某些情况下,col1将为NULL。它的值长度最多不超过40个字符 是否有一个SQL语句可以在不进入PL/SQL的情况下实现这一点 感谢您的帮助。以下内容应该可以: select case when to_char(COL2, 'yyyy') < 2001 then 'OLD ' || n

表1所示为:

col1 varchar2(85) 
col2 date
col1中有大量可用的字符空间。如果col2值早于2001,则需要将值
OLD
附加到col1中任何值的前端

在某些情况下,col1将为NULL。它的值长度最多不超过40个字符

是否有一个SQL语句可以在不进入PL/SQL的情况下实现这一点


感谢您的帮助。

以下内容应该可以:

select case when to_char(COL2, 'yyyy') < 2001
            then 'OLD ' || nvl(COL1, '')
            else COL1 end case
from   TAB1

这也将只在一个SQL语句中工作,因为它将更新所有值小于2001的行

update TAB1 set col1='OLD ' || nvl(COL1, '') where to_char(COL2, 'yyyy') < 2001;
update TAB1 set col1='OLD'| nvl(col1',)where to_char(COL2,'yyyy')<2001;

当TojChar(COL2,YYYY)<“2001”,然后“老”结束时,COL1结束< /代码>,只允许一次明确地引用< Cord> Cale>代码>。不一定需要ToChar COL2,将日期与日期“COL2< toy日期”(“01/01/2011”,“D/MM/YYYY”)进行比较会更有效。如果不进一步了解db,我认为这不是一个好建议。您可能会破坏正在运行的系统。另外:如果col1前面有“OLD”,则对于某些值,这可能超过85个字符。
COL1           COL2          CASE
testpost2001   15/12/2011    testpost2001
testpre2001    1/07/2000     OLD testpre2001
               15/12/2011    
                1/07/2000    OLD 
update TAB1 set col1='OLD ' || nvl(COL1, '') where to_char(COL2, 'yyyy') < 2001;