oracle 如果满足A列中的条件,则用B列中的值填充A列中的行

fslejnso  于 2023-08-03  发布在  Oracle
关注(0)|答案(4)|浏览(122)

我有一张table,就像:

colA    | colB
" "     | 1
"K 111" | 1
"K222"  | 2
" "     | 3

字符串
有些列只有空格(““),有些列有“K {number}",有些列有“K{number}"。
如果colA只有一个空格,我希望用colB中的值替换该值。
所以最终结果应该是:

colA    | colB
1       | 1
"K 111" | 1
"K222"  | 2
3       | 3


我该怎么办?

k4aesqcs

k4aesqcs1#

可以使用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 = ' ';

8ftvxx2r

8ftvxx2r2#

可以使用case表达式:

select 
    case when cola = ' ' then to_char(colb) else cola end as cola,
    colb
from mytable

字符串
请注意,case表达式的所有分支必须返回相同数据类型的值。看起来colb是一个数字,所以这将它转换为字符串。

t9aqgxwy

t9aqgxwy3#

或者,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>

字符串

nr7wwzry

nr7wwzry4#

另一个选项是使用IS NULL检查更新值,如下所示:

update your_table
   set colA = to_char(colB)
 where trim(colA) is null;

字符串
Oracle中的空字符串被视为null。

相关问题