正则表达式用于在SQL语句中用点替换逗号

时间:2013-03-28 09:29:48

标签: regex

我正在从Oracle迁移到PostGreSQL。我发现的一个问题是我需要用“。”替换“,”。对于数值。

E.g。

Insert into DAILY_DATA_READING (READING_ID,MG_ID,DAILY_READING_DATE,ACQUISITION_DATE,PUBLISHED,PUBLISHING_DATE,POD_ID,VB_DAILY,VM_DAILY,VB_TOT,VM_TOT,VM_TOT_AL,CONV_QMAX_FLOW_RATE,GATH_CONV_QMAX_FLOW_RATE_DATE,RECORD_VALIDITY,PARTITION_INDEX) 
values ('1028','99990000000010001',to_timestamp('16-OCT-12 06:00:00,000000000','DD-MON-RR HH24:MI:SS,FF'),to_timestamp('16-OCT-12 08:27:10,704000000','DD-MON-RR HH24:MI:SS,FF'),null,null,'99990000000010','13','48','93','234','35',
'101,4000015258789',to_timestamp('15-OCT-12 12:20:00,000000000','DD-MON-RR HH24:MI:SS,FF'),'S','10');

在此示例中,我必须将 101,4000015258789 替换为 101.4000015258789 。 我尝试过一个简单的文本扫描,搜索“,”后跟8位数字并用“。”替换它。但我也结束了时间戳列的替换。
是否可以构建一个正则表达式,它只替换INSERT语句中包含的第14个字段?
非常感谢

2 个答案:

答案 0 :(得分:0)

如果您有权访问sed,则可以执行以下操作:

sed -r "s/('[0-9]+),([0-9]{8,}')/\1.\2/g" file.sql

在Mac上的OR:

sed -E "s/('[0-9]+),([0-9]{8,}')/\1.\2/g" file.sql

答案 1 :(得分:0)

在SQL中,替换

('[0-9]*),([0-9]+')

$1.$2

(取决于您使用的程序)

\1.\2