【问题标题】:substr function for substract the column value basis of another column in oracle用于减去oracle中另一列的列值基础的substr函数
【发布时间】:2015-01-29 04:22:45
【问题描述】:

oracle中如何使用substr函数减去列值 基于同一张表中的另一列 vale。 例如:假设表 abc 有一些列值,如 a=01-CEDAPRB=AB_52MM_01-CEDAPR

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

【问题讨论】:

  • 提供样本输入输出
  • input:a=01-CEDAPR B:AB_52MM_O1-CEDAPR, O/p:ab_52_mm,但是这里的问题是我想拒绝最后一个 _ on wards 的字符串。你可以说 (-_) 它可以是任何位置,例如 -8 或 -9 中的某个时间
  • 输出列c怎么样
  • 请在问题中添加信息,而不是作为 cmets。目前还不清楚;您想从最后一个下划线截断b 值,还是只删除匹配下划线的结尾部分和a 中的值?还是别的什么?
  • 嗯,您在 A 列中有 01-CEDAPR,但看起来您希望从 B 列中删除 O1-CEDAPR。0 != O ...这是一个错字吗?

标签: oracle oracle11g oracle10g oracle-sqldeveloper


【解决方案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.

【讨论】:

    【解决方案2】:

    根据您提供的粗略信息,以下几个解决方案可能对您有帮助,也可能无济于事。如果他们不这样做,那么您将需要编辑您的问题,以提供更详细的说明来说明您的目标!

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2017-11-15
      • 2021-02-22
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多