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

时间:2011-12-15 00:58:01

标签: oracle oracle11g

表1有

col1 varchar2(85) 
col2 date

col1中有很多可用的字符空间。如果col2值在2001之前,则需要将col1中值OLD附加到col1的任何值的前端。

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

是否存在可以在不进入PL / SQL的情况下实现此目的的SQL语句?

感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

以下内容应该有效:

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

例如:

insert into TAB1 values ('testpost2001', trunc(sysdate));

insert into TAB1 values ('testpre2001', '01/Jul/2000');

insert into TAB1 values (null, trunc(sysdate));

insert into TAB1 values (null, '01/Jul/2000');

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

返回:

COL1           COL2          CASE
testpost2001   15/12/2011    testpost2001
testpre2001    1/07/2000     OLD testpre2001
               15/12/2011    
                1/07/2000    OLD 

答案 1 :(得分:0)

这也只适用于一个SQL语句,因为它会更新值小于2001的所有行...

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