6

スプレッドシートのデータを 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 としてすばやく実行しようとしています。

ご協力ありがとうございます。-ピーター

4

1 に答える 1

2

私の MS SQL Server Management Studio 2008r2 で提供されたレコードでは、一致する式はどれも機能しません。

Tagged Expression 8 を使用すると目的の結果が返されますが、9 は返されないため、Tagged Expression 9 に問題があるように思われます。Microsoft に問い合わせるか、バグとして報告することをお勧めします。

より迅速な解決策は、SSMS で検索/置換を実行しているテキストをスプレッド シートに移動し、セル数式を使用してデータを解析して挿入コマンドにすることです。MS Excel を使用している場合は、CONCATENATE、FIND、および MID 関数が役立つでしょう。また、値を独自の列に分割して日付をフォーマットし、1 つの連結を使用して挿入を作成できるようにすると役立ちます。

例が必要な場合はお知らせください。

更新: MS SQL Server Management Studio 2008r2、Visual Studio 2005、および Visual Studio 2010 で例を試してみましたが、同じ結果が得られました。\9 は空の文字列を返します。調べてみると、他の人もこの問題を抱えており(Henrique Evaristo のコミュニティ コンテンツを参照) 、新しいエディターではシステム全体が置き換えられていることがわかりました。

あなたの質問への回答として、SSMS はバグのために 9 つのタグ付き式をサポートしていません。

スプレッドシートのアイデアを使用できない場合は、アクションを 2 つの部分に分割し、最初の 8 つの値を設定してから、もう一度スイングして最後の値を設定してみてください。例えば:

^{: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','\0'

:w:b:w:b:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b{:z}
\1
于 2012-03-29T18:30:01.773 に答える