根据另一个字段的值将字符串附加到 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') < '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 字段的主要内容,如果未能解决你的问题,请参考以下文章
我想要一个 pandas 脚本根据第一个电子表格中的值将一个 excel 表中的值排列到另一个表中
如何从另一个输入文本字段Javascript中输入的值将值设置为输入隐藏字段