【问题标题】:Extract Date from VARCHAR string ORacle从 VARCHAR 字符串中提取日期 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

哈士奇。

【问题讨论】:

    标签: regex oracle date plsql timestamp


    【解决方案1】:

    extract,你的意思是:

    DECLARE
        match VARCHAR2(255);
    BEGIN
        match := REGEXP_SUBSTR(subject, '\d{2}-\w{3}-\d{4}', 1, 1, 'im');
    END;
    

    解释正则表达式

    \d{2}                    # digits (0-9) (2 times)
    -                        # '-'
    \w{3}                    # word characters (a-z, A-Z, 0-9, _) (3
                             # times)
    -                        # '-'
    \d{4}                    # digits (0-9) (4 times)
    

    【讨论】:

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