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

时间:2015-01-28 16:16:48

标签: oracle oracle11g oracle10g oracle-sqldeveloper

如何在oracle中使用substr函数来减去列值  基于同一表中的另一个列值。  例如:假设表abc具有某些列值,如a=01-CEDAPR

现在我想根据值AB_52MM填充列c。任何人都可以建议我 什么是实现这一目标的正确方法。

2 个答案:

答案 0 :(得分:1)

这应该相对简单。您要做的就是替换a的值(如果在b中找到),则不用任何内容。正确?

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.

答案 1 :(得分:0)

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

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;