0

複雑な SQL SELECT クエリからフィールドを抽出する正規表現を探しています (これが最善の方法だと思います)。

select A.field1, A.field2, (B.field1 + ', ' +  B.field2), (SELECT C.field1 FROM C_table AS C WHERE C.Id = A.Id) from A_table as A join B_Table as B ON B.AId = A.Id

またはそのようなクレイジーなもの。

出力 [] は次のようになります。

  • A.フィールド1
  • A.field2
  • (B.field1 + ', ' + B.field2)
  • (SELECT C.field1 FROM C_table AS C WHERE C.Id = A.Id)

SELECT と FROM の間でフィールドを取得するコードを既に作成しました

A.field1, A.field2, (B.field1 + ', ' +  B.field2), (SELECT C.field1 FROM C_table AS C WHERE C.Id = A.Id)

したがって、括弧内のものを除いて、各コンマで分割することは可能かもしれません...

ありがとうございました !

4

4 に答える 4

0

すでに有効なクエリであることがわかっている場合:

([^'",]+|(["'])((?!\2).|\\\2)*\2)+

セットを使用していない限り、これは MySQL で機能しますが、TSQL はまったく使用しません。次の 2 つの部分で機能します。

[^'",]+  Any number of characters that are not ', ", or  a comma.

また

(["'])((?!\2).|\\\2)*\2  A string. (delimited by double or single quotes).

セットを含めると、括弧の深さをカウントする必要があるため、非正規言語になります。

于 2013-07-24T20:55:04.373 に答える
0

2 番目の文字列を regex で, (?![^\(]*?\))分割します - 次の閉じ括弧が次の開き括弧 (存在する場合) の前にない場合は、カンマとそれに続くスペースで分割します。

string[] output = Regex.Split(select_clause, ", (?![^\(]*?\))");

select_clauseは、 SELECTFROMの間から抽出した文字列です

于 2013-07-24T18:27:00.580 に答える