正则表达式替换字符串中的TO_DATE

时间:2012-06-12 03:33:34

标签: sql regex oracle

我有一个包含TO_DATE函数的字符串。我想用SYSDATE替换这个TO_DATE调用。

例如,我的字符串基本上是一个SQL插入或更新,所以我有类似

的东西
INSERT INTO table_a (col_a, col_b, col_c, updt_dt) VALUES ('A', 'B', 'C', to_date('2012-06-11 22:10:44', 'YYYY-MM-DD HH24:MI:SS'));

我想用这个替换TO_DATE调用:

INSERT INTO table_a (col_a, col_b, col_c, updt_dt) VALUES ('A', 'B', 'C', SYSDATE);

请记住,整个insert语句位于一个数据库字段中。那么,我如何使用regexp_replace用SYSDATE替换TO_DATE调用?

我正在运行Oracle 10gR2。

3 个答案:

答案 0 :(得分:1)

在linux上使用sed

sed -e "s/to_date([A-Za-z0-9:' ,-]\+)/sysdate/g" <<< "INSERT INTO table_a (col_a, col_b, col_c, updt_dt) VALUES ('A', 'B', 'C', to_date('2012-06-11 22:10:44', 'YYYY-MM-DD HH24:MI:SS'));"

如果你没有使用linux,那么find / replace regexp是:

s/to_date([A-Za-z0-9:' ,-]+)/sysdate/g

它应该与编辑器使用的大多数regexp引擎兼容

答案 1 :(得分:1)

如果你的字符串只包含一个to_date函数,并且to_date函数的长度总是相同,那么你可以使用instr来获取第一次出现to_date的位置。

你的陈述大致如下:

更新......   set field = substr(field,1,instr(..) - 1)|| 'sysdate'|| substr(field,instr(..)+ 99) 哪里..

答案 2 :(得分:0)

我使用正则表达式选择了to_date部分并替换为'sysdate':'to_date [^)] *)'