表1有
col1 varchar2(85)
col2 date
col1中有很多可用的字符空间。如果col2值在2001之前,则需要将col1中值OLD
附加到col1的任何值的前端。
在某些情况下,col1将为NULL。最多它的长度值小于40个字符。
是否存在可以在不进入PL / SQL的情况下实现此目的的SQL语句?
感谢所有帮助。
答案 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;