我正在从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个字段?
非常感谢
答案 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