如果满足 A 列中的条件,则用 B 列的值填充 A 列中的行
Fill rows in column A with value of column B if condition in column A is met
我有一个 table 喜欢:
colA | colB
" " | 1
"K 111" | 1
"K222" | 2
" " | 3
有些列只有 space (" "),有些列有 "K {number}",有些有 "K{number}"。
如果 colA 有一个 space 我想用 colB 中的值替换那个值。
所以最终结果应该是:
colA | colB
1 | 1
"K abc" | 1
"Kdef" | 2
3 | 3
我该怎么做?
您可以使用 case
表达式:
select (case when colA = ' ' then to_char(col_b)
else colA
end) as new_colA
如果你想更通用,你可以使用 like
:
select (case when colA like 'K%' then colA
else
end) as new_colA
在 update
中,您可以将 when
条件移动到过滤条件:
update t
set colA = to_char(colb)
where colA = ' ';
您可以使用 case
表达式:
select
case when cola = ' ' then to_char(colb) else cola end as cola,
colb
from mytable
请注意,case
表达式的所有分支必须 return 相同数据类型的值。好像 colb
是一个数字,所以这会将它转换为一个字符串。
或者,DECODE
函数(只是CASE
的替代):
SQL> with test (cola, colb) as
2 (select 'K 111', 1 from dual union all
3 select ' ' , 1 from dual union all
4 select 'K222' , 2 from dual union all
5 select ' ' , 3 from dual
6 )
7 select decode(cola, ' ', to_char(colb), cola) cola,
8 colb
9 from test;
COLA COLB
---------- ----------
K 111 1
1 1
K222 2
3 3
SQL>
另一种选择是使用 IS NULL
检查更新值,如下所示:
update your_table
set colA = to_char(colB)
where trim(colA) is null;
Oracle 中的空字符串被视为 null。
我有一个 table 喜欢:
colA | colB
" " | 1
"K 111" | 1
"K222" | 2
" " | 3
有些列只有 space (" "),有些列有 "K {number}",有些有 "K{number}"。
如果 colA 有一个 space 我想用 colB 中的值替换那个值。
所以最终结果应该是:
colA | colB
1 | 1
"K abc" | 1
"Kdef" | 2
3 | 3
我该怎么做?
您可以使用 case
表达式:
select (case when colA = ' ' then to_char(col_b)
else colA
end) as new_colA
如果你想更通用,你可以使用 like
:
select (case when colA like 'K%' then colA
else
end) as new_colA
在 update
中,您可以将 when
条件移动到过滤条件:
update t
set colA = to_char(colb)
where colA = ' ';
您可以使用 case
表达式:
select
case when cola = ' ' then to_char(colb) else cola end as cola,
colb
from mytable
请注意,case
表达式的所有分支必须 return 相同数据类型的值。好像 colb
是一个数字,所以这会将它转换为一个字符串。
或者,DECODE
函数(只是CASE
的替代):
SQL> with test (cola, colb) as
2 (select 'K 111', 1 from dual union all
3 select ' ' , 1 from dual union all
4 select 'K222' , 2 from dual union all
5 select ' ' , 3 from dual
6 )
7 select decode(cola, ' ', to_char(colb), cola) cola,
8 colb
9 from test;
COLA COLB
---------- ----------
K 111 1
1 1
K222 2
3 3
SQL>
另一种选择是使用 IS NULL
检查更新值,如下所示:
update your_table
set colA = to_char(colB)
where trim(colA) is null;
Oracle 中的空字符串被视为 null。