スプレッドシートのデータを SQL の挿入ステートメントに変換する必要があります。SSMS で検索と置換ツールを使用するためのほとんどの正規表現を作成しましたが、最後の置換で 9 番目の括弧で囲まれた項目を参照しようとすると問題が発生します。
元のレコードは次のとおりです。
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
そして、これが私が必要とするものです(今のところ):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
許可される括弧内の項目の数に制限があるため、置換を 3 回実行する必要があります。最初にこれをPOCとして機能させることができれば、これはストアドプロシージャに機能する可能性があります。
これは最初に一致する式です:
^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z}
そして置き換え:\10\2/0\3/\40\5/0\6/\7
これにより、月と日にゼロが追加され、少なくとも 2 文字になります。
次の一致では、日付がクエリで必要な形式に再フォーマットされます (日付フィールドを使用しないことについてのコメントはありません。これは、データベースのクライアント要件です)。
一致する表現:
^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}
そして置き換え:\1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
最後に、最終的な一致により、insert ステートメントで使用される SQL ステートメントに結果が挿入されます。
一致する表現:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
そして置き換え:select '\1','\2','\3','\4','\5','\6','\7','\8','\9'
最後の交換を除いてすべて機能します。何らかの理由で、\9 は一致からデータを取得していません。置換式全体を \9 に置き換えると、空白ができます。\8 を使用すると、N が得られます。括弧で囲まれた 8 番目の項目を削除して、9 番目の項目を 8 番目にすると、必要な 20120101 が返されます。
だから私の質問は、検索/置換と正規表現を使用する場合、SSMS / SQLは9つのタグ付き式を許可しますか? それとも、ここで何か不足していますか? 私はこれを行う他の方法があることを知っています。これを sproc またはアプリケーションに移動する前に、POC としてすばやく実行しようとしています。
ご協力ありがとうございます。-ピーター