我有一个包含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。
答案 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 [^)] *)'