oracle中减去另一列的列值基础的substr函数

substr function for substract the column value basis of another column in oracle

oracle中如何使用substr函数减去列值 基于同一 table 中的另一个列值。 对于 example:suppose table abc 具有某些列值,例如 a=01-CEDAPRB=AB_52MM_01-CEDAPR

现在我想根据值 AB_52MM 填充列 c。谁能建议我 实现此目标的正确方法是什么。

根据您提供的粗略信息,这里有一些可能对您有帮助或没有帮助的解决方案。如果他们不这样做,那么您将需要编辑您的问题以提供更详细的解释!

with sd as (select '01-CEDAPR' a, 'AB_52MM_01-CEDAPR' b from dual) -- assumed O1 in column b was a typo
select a,
       b,
       regexp_replace(b, '_'||a),
       substr(b, 1, instr(b, '_', -1) -1) 
from   sd;

这应该比较简单。如果在 b 中找到 a 的值,则您要做的就是将其替换为空值。对吗?

WITH abc AS (
  SELECT '01-CEDAPR' AS a, 'AB_52MM_01-CEDAPR' AS b
    FROM dual
)
SELECT a, b, REPLACE(b, a)
  FROM abc

See SQL Fiddle Demo here.

如果您需要替换 a 值之前的 _,那么您可能需要使用 REGEXP_REPLACE()(以防 _ 可能会或可能不会存在):

WITH abc AS (
  SELECT '01-CEDAPR' AS a, 'AB_52MM_01-CEDAPR' AS b
    FROM dual
)
SELECT a, b, REGEXP_REPLACE(b, '_?' || a || '$')
  FROM abc

$符号确保a的值锚定到末尾; ? 使 _ 可选。

SQL Fiddle Demo here.