0

我有一个代码字符串,其中代码与 AND、OR 和括号连接。

我想拆分它们,以便获得多条记录,其中代码仅通过 AND 连接

AND 用 + 表示,OR 用 / 表示

例如,如果我有以下两条记录

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 应匹配 PartA 和 Part B
产品 3 应匹配 PartA

感谢您的任何帮助。

4

1 回答 1

0

从我们掌握的非常少的信息以及我所能理解的一点点来看,我不得不猜测您应该看看用户定义函数(UDF)。另见这篇文章。

编辑我现在在 user2216002 的编辑之后
看到了逻辑。我已经进一步澄清了这个问题。

可以使用 UDF 来完成,但出于大型(r)表的性能原因以及代码不会非常“漂亮”的事实,我建议不要这样做。我建议首先查看数据库的规范化是否有助于解决以更有效的方式存储这些“短语”的问题。

如果您坚持使用“仅限 SQL”的解决方案,您将不得不在 T-SQL 中编写一个表达式解析器,这又不是很漂亮,并且需要大量工作才能使其正确。如果“短语”(或更确切地说:表达式)不比问题中的示例复杂,您可以采取一些捷径。

于 2013-03-27T14:47:10.947 回答