2012-06-12 23 views
0

我有一個字符串,它有一個TO_DATE函數。我想用SYSDATE替換這個TO_DATE調用。正則表達式來替換字符串中的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。

+0

你問的是如何替換'table_a'中的值? 或者你問如何修改查詢? – mtahmed

+0

我猜sql查詢是VARCHAR2字段中的一個值,Nik想用sysdate替換to_date文本。所以它與查詢無關,它只是一個正則表達式問題。 – kentcdodds

+0

對不起,如果我不清楚。 kentcdodds是正確的。 sql語句是表中VARCHAR2字段中的值。那麼,如何在我的查詢中使用regexp_replace將sys_date替換爲to_date? – sukach

回答

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,查找/替換正則表達式是:

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

這應該是大部分的兼容編輯器使用的正則表達式引擎

+0

謝謝,這指出我在寫作方向。我的最後陳述是: 'SELECT regexp_replace(sql_stmt,'to_date \([A-Za-z0-9:'', - ] + \)','SYSDATE')FROM sample_table;' – sukach

1

如果您的字符串只包含一個to_da te函數,並且如果to_date函數總是具有相同的長度,則可以使用instr來獲取to_date第一次出現的位置。

你的語句將大致看起來像:

更新... 設置字段= SUBSTR(場,1,INSTR(..) - 1)|| 'sysdate'|| substr(field,instr(..)+ 99) 其中......

+0

可能會出現多次to_date,但是,考慮它,我可能會只是更換第一次出現。 – sukach