Oracle 根据另一个字段的值将字符串追加到varchar2字段
表1所示为: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
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;