我正在处理一些存储在 VARCHAR2(4000) 列中的数据,这些数据主要是文本注释,但也包含文本中的日期。我编写了一个查询,它使用 SUBSTR 和 INSTR 进行模式匹配并找到日期之前的前导文本值,然后 SUBST 返回日期值,然后我使用 TO_DATE 将其转换为日期。这很好用,但是我有许多包含多个评论和多个日期的记录。使用上述方法,我只能指定此模式的第 (n) 次出现,有没有办法在匹配时返回所有日期,而不仅仅是一次出现?
这是 varchar 列中的数据示例;
LOCKED ENTITY: ACCOUNT
LOCKED BY USER: ops
LOCKED AT: 31/05/2004 11:47
CUST NOTES: <Please enter explanation here>
Customer notes are entered here.
UNLOCKED ENTITY: ACCOUNT
UNLOCKED BY USER: ops
UNLOCKED AT: 31/05/2004 11:49
UNLOCK NOTES: <Please enter explanation here>
Test
LOCKED ENTITY: USER
LOCKED BY USER: ops
LOCKED AT: 31/05/2004 11:50
LOCK NOTES: <Please enter explanation here>
Test
UNLOCKED ENTITY: USER
UNLOCKED BY USER: ops
UNLOCKED AT: 24/08/2009 16:47
UNLOCKED NOTES: <Please enter explanation here>
这是我正在使用的查询的简化版本(为清楚起见,删除了所有其他不相关的连接和列);
select substr(VALUE, INSTR(VALUE,'LOCKED AT: ',1)+11, 10) as "DATE"
from tableA a
join tableB b
on a.id = b.id
where regexp_like (VALUE ,'ABC|DEF|GHI');
DATE
----------
31/05/2004
对于上述查询,我想返回字符串 'LOCKED AT:' 之后的所有日期,例如;
DATE
----------
31/05/2004
31/05/2004
任何帮助,将不胜感激。有关数据库版本是 Oracle 10g 的信息,我尝试使用 REGEXP_COUNT 来实现我的想法,但仅适用于 11g 以后。
非常感谢