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

Posted

技术标签:

【中文标题】根据另一个字段的值将字符串附加到 varchar2 字段【英文标题】:append string to varchar2 field based on the value of another field 【发布时间】:2011-12-15 00:58:01 【问题描述】:

表1有

col1 varchar2(85) 
col2 date

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

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

是否有一个 SQL 语句可以在不进入 PL/SQL 的情况下完成此操作?

感谢所有帮助。

【问题讨论】:

【参考方案1】:

类似下面的东西应该可以工作:

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 

【讨论】:

您可以考虑使用case when to_char(col2, 'yyyy') &lt; '2001' then 'OLD' end || col1 end,以便仅对col 进行一次显式引用。 不确定是否需要 to_char COL2,将日期与日期进行比较会更有效,例如`col2 【参考方案2】:

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

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

【讨论】:

如果不进一步了解数据库,我认为这不是一个好建议。您可能会破坏正在运行的系统。另外:如果 col1 前面带有“OLD”,则对于某些值,这可能会超过 85 个字符。

以上是关于根据另一个字段的值将字符串附加到 varchar2 字段的主要内容,如果未能解决你的问题,请参考以下文章

Python:根据更新的值将值附加到现有电子表格

如何查询行中是不是存在值将值添加到另一个字段?

我想要一个 pandas 脚本根据第一个电子表格中的值将一个 excel 表中的值排列到另一个表中

如何从另一个输入文本字段Javascript中输入的值将值设置为输入隐藏字段

如何根据文本字段 Material UI 中设置的值将对象设置为状态

熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)