我想提取(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
(因为第一行中只有数学计算机值不匹配,第二行中有两个匹配项,第三行中没有匹配项)。
我能得到那个输出吗?
答案 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;
这很容易推广为更多的值,而不必担心引入相邻的空格。