0

コードが AND、OR、および括弧で接続されているコード文字列があります。

コードがANDのみで接続されている複数のレコードを取得できるように、それらを分割したいと思います

AND は + で、OR は / で表されます。

たとえば、次の2つのレコードがある場合

Phrase        Translates to:
=======       ==============
(A/B)+C       (A OR B) AND C
(D+E)/F       (D AND E) OR F

結果は

Expression    Translates to:
=======       ==============
A+C           A AND C
B+C           B AND C

D+E           D AND E
F             F

私のSQL構文は次のようになります。

CREATE TABLE Code_Conditions(
  Part AS CHAR(10),
  Condition AS VARCHAR(255)
);

CREATE TABLE Product(
  Product_ID AS INT PRIMARY KEY,
  Code_String AS VARCHAR(255)
);

CREATE TABLE Product_Parts(
  Product_ID AS INT FOREIGN KEY REFERENCES Product (Product_ID),
  Part AS CHAR(10)
);


INSERT INTO Code_Conditions (Part, Condition) VALUES ('PartA', '(A/B)+C');
INSERT INTO Code_Conditions (Part, Condition) VALUES ('PartB', '(D+E)/F');

INSERT INTO Product(Product_ID, Code_String) VALUES ( 1, 'A+B+D');
INSERT INTO Product(Product_ID, Code_String) VALUES ( 2, 'B+C+F');
INSERT INTO Product(Product_ID, Code_String) VALUES ( 3, 'B+C+D');

製品 1 は部品と一致しない
製品 2 は部品 A と部品 B と一致する必要があります
製品 3 は部品 A と一致する必要があります

助けてくれてありがとう。

4

1 に答える 1

0

私たちが持っている非常にわずかな情報と、私が理解できるわずかな情報から、ユーザー定義関数(UDF) を調べる必要があると推測する必要があります。こちらの記事もご覧ください。

編集user2216002 の編集後
、ロジックが表示されます。質問をもう少し明確にしました。

これは UDF を使用して行うことができますが、大規模なテーブルでのパフォーマンス上の理由と、コードがあまり「きれい」ではないという単なる事実のために、UDF を使用しないことをお勧めします。データベースの正規化がこれらの「フレーズ」の保存をより効率的な方法で解決するのに役立つかどうかを最初に確認することをお勧めします。

「SQL のみ」のソリューションを主張する場合は、T-SQL で式パーサーを作成する必要がありますが、これも見栄えがよくなく、それを正しく行うには多くの作業が必要です。「フレーズ」(または式)が質問の例よりも複雑でない場合は、いくつかのショートカットを使用できます。

于 2013-03-27T14:47:10.947 に答える