从 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'