【问题标题】:Oracle SQL: Return string from blob between two strings (probably using REGEXP_SUBSTR)Oracle SQL:从两个字符串之间的 blob 返回字符串(可能使用 REGEXP_SUBSTR)
【发布时间】:2017-08-27 13:59:01
【问题描述】:

我正在尝试从 blob 中导出数据以在报告中使用,但是在尝试从中读取数据时使用 REGEXP_SUBSTR 时遇到问题。将其转换为 varchar 会有所帮助,但是要找到我需要的数据点非常困难!

这是我如何将其转换为 varchar:

select utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE)) FROM prod17import;

这是 varchar 的输出示例:

"Import: T5, ModId: #24, Time: 1/11/2017 7:32:30 AM
Records read: 1723
Added:  1723, Changed: 0
Rejected: 0, Skipped: 0
0.01 Minutes. 234422 recs/min
Map=IMCOWITHHOLDINGLAYOUTTEST9A.MPWM 
Source=W:\(filename).TXT, created: 1/10/2017 11:15:44 PM

Reject name: REJECT
Resource name: !6Imports.Liability.Maps.Life Import Resource
"

我试图只收集值 234422(可以在 1-1,000,000 之间变化)

如何在“分钟”一词之间获得该值。和“记录/分钟”?

【问题讨论】:

  • 为什么是 BLOB 而不是 CLOB? BLOB 用于二进制文件,而不是文本。您不应该期望从 BLOB 中提取文本很容易。

标签: sql oracle regexp-substr


【解决方案1】:

如果字符串格式一致,则使用

select regexp_substr(utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE)) 
                     ,'minutes. ([0-9]+) recs/min',1,1,'i',1)
from prod17import

i 作为参数指定不区分大小写的匹配。如果您需要匹配区分大小写,请使用null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2023-02-10
    • 2019-08-18
    • 2021-10-11
    相关资源
    最近更新 更多