SQLスクリプトの日付変換

SQLスクリプトの日付変換

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に-EEREを有効にするオプションがある場合(例: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);

おすすめ記事