提取不匹配的内容或值

时间:2019-05-22 06:26:05

标签: sql sqlite

我想提取(table1)中的数据中不匹配的值


name    id  subject
maria   01  Math computer english
faro    02  Computer stat english
hina    03  Chemistry physics bio

以下查询

Select *
from table1
where subject like ‘%english%’ or 
      subject like ‘%stat%’

返回与条件匹配的前两行。

但是我只需要从列(主题)中提取不匹配的值,就像下面的输出

unmatched
math computer
computer
chemistry physics bio

(因为第一行中只有数学计算机值不匹配,第二行中有两个匹配项,第三行中没有匹配项)。

我能得到那个输出吗?

2 个答案:

答案 0 :(得分:1)

使用REPLACE可以消除所有出现的值'english'和/或'stat'

SELECT
  trim(
    replace(replace(replace(subject, 'english', ''), 'stat', ''), '  ', '')
  ) unmatched
FROM tablename;

最终修剪和替换将从结果中删除双倍空格,并从开始和结尾处删除空格。

答案 1 :(得分:1)

您的表格设计不佳。您应该将列表作为单独的行存储在另一个表中,即所谓的“连接”表或“关联”表。 SQL具有用于存储列表的出色数据类型。它叫做“表”而不是“字符串”。

也就是说,有时我们会被其他人束之高阁,对数据模型的选择确实非常糟糕。

如果是,则可以使用replace()trim()来获取所需的列表。我会的:

SELECT trim(replace(replace(' ' || subject || ' ', ' english ', ' '
                           ), ' stat ', ''
                   ), '  ', ' '
           ) as unmatched
FROM tablename;

这很容易推广为更多的值,而不必担心引入相邻的空格。