我从另一个帖子中得到了这个查询,该帖子用于REGEXP_SUBSTR()
从 oracle 中的字符串中提取特定信息。它工作得很好,但只适用于小数据集。对于具有 300,000 多条记录的表,它非常慢,我正在阅读一些内容,认为 instr + substr 可能会更快。示例查询是:
SELECT REGEXP_SUBSTR(value, '(^|\|)\s*24=\s*(.*?)\s*(\||$)', 1, 1, NULL, 2) AS "24",
REGEXP_SUBSTR(value, '(^|\|)\s*35=\s*(.*?)\s*(\||$)', 1, 1, NULL, 2) AS "35",
REGEXP_SUBSTR(value, '(^|\|)\s*47A=\s*(.*?)\s*(\||$)', 1, 1, NULL, 2) AS "47A",
REGEXP_SUBSTR(value, '(^|\|)\s*98A=\s*(.*?)\s*(\||$)', 1, 1, NULL, 2) AS "98A"
FROM table_name
表格示例:
CREATE TABLE table_name (value ) AS
SELECT '35= 88234.00 | 47A= Shawn | 98A= This is a comment |' FROM DUAL UNION ALL
SELECT '24= 123.00 | 98A= This is a comment | 47A= Derick |' FROM DUAL
查询的输出将是:
24 | 35 | 47A | 98A |
---|---|---|---|
88234.00 | 肖恩 | 这是一条评论 | |
123.00 | 德里克 | 这是一条评论 |
有人可以给我一个例子,如果我改用 instr+substr ,这个查询会是什么样子?
谢谢你。