【发布时间】:2018-04-01 02:51:41
【问题描述】:
我需要在包含自身的字符串之前获取所有内容,然后将其替换为其他内容。例如,如果我在列中有一个值为 28/29/81/732536/1496071 的值,那么我想选择 81 之前的所有内容,包括它自己,即我想从中选择 28/29/81 并将其替换为其他字符串。我已经尝试了以下方法,但我只得到了 28/29。
SELECT SUBSTR(eda.ATTRIBUTE_VALUE, 0, INSTR(eda.ATTRIBUTE_VALUE, '81')-2) AS output, ATTRIBUTE_VALUE
FROM EVENT_DYNAMIC_ATTRIBUTE eda
【问题讨论】:
-
显然需要增加第三个参数——将
-2改为+1左右。但是,如果输入中不存在字符串'81',您将遇到问题。然后:你真的要匹配'/81/',而不是'/19812/'中的81? -
81 可以是 / 和 / 之间的任何数字,即它可以是 81 或 3543、543545 之类的,在我的查询中匹配字符串来自参数
-
你没有理解我的问题。如果attribute_value 是
28/29/81/732536,这是否匹配253?它是732536的子字符串 - 这足以形成匹配吗? -
您的意思是,您将 / 字符之间的数字视为段,并询问是否也应在这些段中覆盖部分匹配。我在下面的回答假设应该涵盖部分匹配。如果不应该那么我可以提出这样的建议:如果你需要匹配'123',你可以在'/'中搜索'/123/' || eda.ATTRIBUTE_VALUE || '/' 和我的回答一样……
-
@mathguy,它应该匹配 / 和 / 之间的整数
标签: sql oracle substring substr