2011-12-15 72 views
1

表1的值具有追加字符串VARCHAR2字段基於另一字段

col1 varchar2(85) 
col2 date 

有大量的字符可用空間在COL1。如果col2的值在2001之前,則需要追加col1中的任何值OLD到任何可能在col1中的值的前端。

在某些情況下,col1將爲NULL。最多隻能有小於40個字符的值。

是否有一條SQL語句可以在不進入PL/SQL的情況下完成此操作?

感謝任何和所有的幫助。

回答

0

這也將只在一個SQL語句的工作,因爲它會更新所有行的值小於2001 ...

update TAB1 set col1='OLD ' || nvl(COL1, '') where to_char(COL2, 'yyyy') < 2001; 
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

你可能會考慮使用`case when when_char(col2,'yyyy')<'2001'then'OLD'end || col1結束「,以便只有一次對」col「的明確引用。 – 2011-12-15 05:11:39

+1

不確定是否需要to_char COL2,將日期與日期進行比較會更有效。 `col2 2011-12-15 09:04:35

相關問題