如何在SQL中找到可能出现在其含义发生变化的不同位置的字符串?

时间:2017-08-23 12:51:41

标签: sql sql-server

我变得非常难过,试图弄清楚如何在另一个字符串中查找字符串,其含义可以根据前面或后面的字符而改变。

我提供了一个选项列表,该列表位于分隔的字符串中,具体取决于所提供的选项取决于适用的数据。

所以我有一个列表,其中包含以下内容:

A1|B2|C3|D4|E5|F6

然后我需要过滤另一个使用+-()/组合的数据集,以确定适用的选项。

例如,我可能会有以下内容:

+A1-(C3/D4):仅当存在A1并且C3D4不存在时才适用 +(A1/B2):仅当A1B1存在时才适用

我发现自己遇到的问题是,根据要求或不要求,这可能会导致相当混乱,可能不会直接在+-之后。

例如,我可以拥有以下内容:

-A1+(B2/C3/D4)/-E5+(F6/G7/H8)

转换为:

Must not have A1 but have either B2, C3 or D4

OR

Must not have E5 but have either F6, G7 or H8

基本上我需要查看这些选项是直接在+之前还是在() +()之类的-之后,然后还要查看反向是否为真(所以之前)通过-()SET @option = 'E5' SELECT * FROM data WHERE ( options LIKE '%+' + @option + '%' OR options LIKE '%+(%' + @option + '%)%' ) AND ( options NOT LIKE '%-' + @option + '%' OR options LIKE '%-(%' + @option + '%)%' ) )。

我正在考虑使用像下面这样的LIKE语句块。

+A1-(B2/C3/D4)/-E5+(F6/G7)

但是,我担心在某些情况下这可能会失败。

例如,如果数据行上的选项列表是:

F6

由于技术上 -(%F6%)位于npm cache clean --force 所以它不适用,即使它应该适用。

我希望这是有道理的。我确信这很简单,但是由于我对正则表达式不太熟悉,目前它让我有点难过。

任何指针都会非常感激。

0 个答案:

没有答案