如何在oracle中使用substr函数来减去列值
基于同一表中的另一个列值。
例如:假设表abc具有某些列值,如a=01-CEDAPR
现在我想根据值AB_52MM填充列c。任何人都可以建议我 什么是实现这一目标的正确方法。
答案 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
如果您需要替换_
之前的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
的值固定在最后; ?
使_
可选。
答案 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;