在SQL update语句中使用子字符串- oracle

gv8xihay  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(140)

我写了一个SQL查询,只更新一个字符串(tax_cd)的一个字段,但它不工作,我必须替换字段12,这是'0'或空白与'1',字符0是一个你发现的条件,在字符串中的所有其他字符不应该被更改
TAX_CD是VARCHAR2(26)

UPDATE doc_table
SET tax_cd=substr(tax_cd,1,11)||'1'||substr(tax_cd,13,26)
WHERE substr(tax_cd,12,1) = 0 ;

当前:“ABC 0 0 L K“
更新:“ABC 0 1 L K“
有什么建议吗?
字符串并不总是等于长度,例如:
它是这样写在table上的
“0 K 1”
因此,理想的是读取记录字段与选择,使长度和基于该尝试写入位置12的代码1,但我不知道如何做到这一点
长度(tax_cd)计数(*)

  • 2 3
  • 3 376
  • 4 32
  • 5 22
  • 6 16
  • 7 1
  • 8 2
  • 25 6
  • 空6
n8ghc7c1

n8ghc7c11#

在我看来

SQL> with test (tax_cd) as
  2    (select 'ABC 0      0      L K     ' from dual union all
  3     select 'DEF 0             L K     ' from dual union all
  4     select 'XYZ 7      2      F M     ' from dual
  5    )
  6  select tax_cd,
  7    case when substr(tax_cd, 12, 1) in ('0', ' ') then
  8              substr(tax_cd, 1, 11) || '1' || substr(tax_cd, 13)
  9         else tax_cd
 10    end as new_value
 11  from test;

TAX_CD                     NEW_VALUE
-------------------------- ------------------------------
ABC 0      0      L K      ABC 0      1      L K
DEF 0             L K      DEF 0      1      L K
XYZ 7      2      F M      XYZ 7      2      F M

SQL>

所以你会

update doc_table set
  tax_cd = substr(tax_cd, 1, 11) || '1' || substr(tax_cd, 13)
  where substr(tax_cd, 12, 1) in ('0', ' ');

相关问题