SQL - 如何在列表中找到可以作为列表中另一个字符串一部分的字符串的确切字符串?

时间:2017-01-28 22:20:03

标签: sql string oracle delimiter sql-like

这个问题听起来令人困惑,但我有一列数据按字符|~*~|划分。我试图根据这些字符之间的字符串查找数据。字符行不是以分隔符开头,而是以分隔符结束。

e.g。 Product Developer|~*~|Technician|~*~|

我遇到的问题如下:

Product Developer|~*~|Technician|~*~|Lead Product Developer|~*~|

如果我搜索WHERE T.COLUMN LIKE '%Lead Product Developer%',我就可以获得该列,但如果我搜索WHERE T.COLUMN LIKE '%Product Developer%',那么我将获得Lead Product DeveloperProduct Developer的位置它是字符串的一部分。我怎样才能避免这种情况,只能得到我正在寻找的字符串。

以下是我所拥有的片段:

SELECT T.COLUMN, FROM TABLE1 T WHERE T.COLUMN LIKE '%Product Developer%'

1 个答案:

答案 0 :(得分:2)

首先,您的数据结构是错误的,错误的,错误的。正确的 SQL 表示此关系的方式是使用另一个表,列表中的每个项目和项目都有一行。此外,Oracle还提供JSON结构和嵌套表。因此,有很多方法可以做到这一点。

有时,我们会遇到其他人非常糟糕的设计决策。在这种情况下,您可以巧妙地使用like

WHERE '|~*~|' || T.COLUMN LIKE '%|~*~|Product Developer|~*~|%'

由于column以分隔符结尾,因此您无需再次将其添加到结尾,只能添加到开头。