如何从filter字符串中提取itnum字段单引号内的TEST1234值?
解决方案
问题分析
你提供的filter字符串中,itnum的值被转义的单引号('')包裹,原SQL失败的原因是硬编码了起始位置(15),且错误定位了第一个=的位置(实际第一个=是filter=里的,并非itnum =中的),导致提取范围完全错误。
方法一:使用嵌套INSTR和SUBSTR(兼容所有Oracle版本)
SELECT SUBSTR( @filter, -- 定位到itnum = ''之后的起始位置 INSTR(@filter, 'itnum = ''') + LENGTH('itnum = '''), -- 计算目标值的长度:第二个''的位置减去起始位置再减1 INSTR(@filter, ''''', INSTR(@filter, 'itnum = ''') + LENGTH('itnum = ''')) - (INSTR(@filter, 'itnum = ''') + LENGTH('itnum = ''')) - 1 ) AS output FROM dual;
方法二:使用正则表达式(Oracle 10g及以上版本)
正则表达式更简洁,直接匹配itnum = ''和后续''之间的内容:
SELECT REGEXP_SUBSTR(@filter, 'itnum = ''''(.*?)''''', 1, 1, NULL, 1) AS output FROM dual;
注意事项
如果你的字符串中使用的是中文单引号(‘’),需要将SQL中的英文单引号替换为对应的中文符号,但实际业务中建议统一使用英文单引号转义(''),避免字符编码问题。
内容的提问来源于stack exchange,提问作者user3686599
相关产品推荐
相关产品推荐

