从 VARCHAR 字符串中提取日期 ORacle

Posted

技术标签:

【中文标题】从 VARCHAR 字符串中提取日期 ORacle【英文标题】:Extract Date from VARCHAR string ORacle 【发布时间】:2014-06-02 10:37:05 【问题描述】:

我正在尝试根据日期戳对表中的数据进行批量删除。但是,日期戳连同大量其他内容一起写入表中,并且模式各不相同,因此我不能使用 SUBSTR 或任何类似的字符串操作函数,我认为我唯一的选择是使用 REGEXP_SUBSTR。不幸的是,我不熟悉 REGEXP 语法,而且运气不佳。

基本上,我的字符串包含以下字符串中的日期:

GKKPACT  -  30-MAY-2014:16:39:13
GKKPACT  -  30-MAY-2014:16:39:13
GKKPACT  -  30-MAY-2014:16:39:13
v_chldcnt - 30-MAY-2014:16:39:26
v_chldcnt - 30-MAY-2014:16:39:26

我只需要从上面的字符串中提取日期,这样我就可以根据 sysdate 执行删除。

任何想法可能是什么正则表达式语法来做到这一点?我发现了关于堆栈溢出的类似请求 (Oracle - extract timestamp from varchar string?) - 我已尝试修改此示例中的语法,但未能成功。

TIA

哈士奇。

【问题讨论】:

【参考方案1】:

extract,你的意思是:

DECLARE
    match VARCHAR2(255);
BEGIN
    match := REGEXP_SUBSTR(subject, '\d2-\w3-\d4', 1, 1, 'im');
END;

解释正则表达式

\d2                    # digits (0-9) (2 times)
-                        # '-'
\w3                    # word characters (a-z, A-Z, 0-9, _) (3
                         # times)
-                        # '-'
\d4                    # digits (0-9) (4 times)

【讨论】:

行得通!我没有使用绑定变量,只是你提供的正则表达式代码。正则表达式末尾的 '1, 1, 'im' 有什么作用?我已删除它们并得到相同的结果。 你说得对,没必要,这只是我的默认设置(不区分大小写 = i,多行 = m...) 太棒了 - 我已将宝贵的代码 sn-ps 添加到我的长长的列表中!再次感谢。 added to my long list of invaluable code snippets 在这种情况下,我强烈建议您考虑将this 用于您的收藏。 :) 不客气,很高兴。

以上是关于从 VARCHAR 字符串中提取日期 ORacle的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'

oracle日期字段为varchar2类型,为啥能直接比较

我们如何仅从 Oracle 中具有各种日期和字符串格式的列中提取日期?

sql 日期分别提取年月?

从 oracle-sql 中的时间戳日期列中提取日期

将日期(varchar)和时间(varchar)转换为日期时间Oracle