Oracle DB에서 내보낸 데이터가 포함된 SQL 파일이 있습니다. MSSQL 형식으로 변환해야 합니다. 이제 날짜 변환 문제로 어려움을 겪고 있습니다.
샘플 라인:
Insert into "schema_version" ("installed_rank","version","description","type","script","checksum","installed_by","installed_on","execution_time","success") values (1,'1.0','schema','SQL','V1_0__schema.sql',-839661171,'HYP_EPMO2',to_timestamp('11/09/18 15:42:42,712463000','DD/MM/RR HH24:MI:SS,FF'),496,1);
to_timestamp('11/09/18 15:42:42,712463000','DD/MM/RR HH24:MI:SS,FF')
로 변환해야 합니다 2018-09-11T15:42:42
. 어떻게 하면 간단한 방법으로 할 수 있나요? 여러 테이블에서 동일한 문제가 발생하므로 열 번호로 레이블을 지정할 수 없습니다. 지금까지 sed
다른 변환을 사용하고 있지만 여기서는 좋은 방법을 찾을 수 없습니다. 저도 노력 중인데 awk
(날짜 패턴을 바꾸는 방법을 찾았습니다) 행에서 날짜만 추출하여 다시 붙여넣는 방법을 모르겠습니다.
답변1
sed에 -E
ERE를 활성화하는 옵션이 있는 경우(예: GNU 및 BSD sed):
$ sed -E "s:(.*)to_timestamp\('([^/]+)/([^/]+)/([^/]+) ([^,]+)[^)]+\):\1'20\4-\2-\3T\5':" file
Insert into "schema_version" ("installed_rank","version","description","type","script","checksum","installed_by","installed_on","execution_time","success") values (1,'1.0','schema','SQL','V1_0__schema.sql',-839661171,'HYP_EPMO2','2018-11-09T15:42:42',496,1);
그렇지 않으면 sed를 사용하십시오.
$ sed "s:\(.*\)to_timestamp('\([^/]*\)/\([^/]*\)/\([^/]*\) \([^,]*\)[^)]*):\1'20\4-\2-\3T\5':" file
Insert into "schema_version" ("installed_rank","version","description","type","script","checksum","installed_by","installed_on","execution_time","success") values (1,'1.0','schema','SQL','V1_0__schema.sql',-839661171,'HYP_EPMO2','2018-11-09T15:42:42',496,1);