0

我有一个字符串,其中有一个 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);

请记住,整个插入语句位于一个数据库字段中。那么,我怎样才能regexp_replace用 SYSDATE 替换 TO_DATE 调用呢?

我正在运行 Oracle 10gR2。

4

3 回答 3

1

sed在 Linux 上使用:

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,则查找/替换正则表达式为:

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

它应该与编辑器使用的大多数正则表达式引擎兼容

于 2012-06-12T03:54:08.530 回答
1

如果您的字符串仅包含一个 to_date 函数并且 to_date 函数始终具有相同的长度,那么您可以使用 instr 获取 to_date 第一次出现的位置。

您的陈述大致如下所示:

更新 ... 设置字段 = substr(field, 1, instr(..)-1) || '系统日期' || substr(field, instr(..)+99) 其中..

于 2012-06-12T08:37:34.193 回答
0

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

于 2020-06-08T13:49:49.677 回答