从MySQL表中的一个字段中选择一个不同的子字符串列表

时间:2010-09-15 10:11:29

标签: mysql

我有

等行
  • [问题]这是一个示例问题
  • [网站]网站上的错误
  • 请注意,此行不包含方括号内的任何内容
  • [网站]网站上的另一个错误
  • [TRACKER]它不活!
  • 有些行会将它们放在[中]但我不想要它们

等。

假设该字段被称为“标题”,该表称为“问题”。该列中的所有项目都以方括号内的字符串开头。方括号内没有明确的单词列表。对长度也没有限制。如果字段不以这样的字符串开头,我就不需要它。

我希望在方括号内找到这个词,并获得这些词的唯一列表。

我想选择所有[XYZ]的不同列表。例如,在上面的列表中,查询应返回以下字符串列表:

  • ISSUE
  • 网站
  • TRACKER

它是子串逻辑和不同查询的组合。逻辑可能像找到第一个[和第一个]的索引,并从列表中获取字符串,创建一个唯一列表。我发现几乎不可能在一个MySQL查询中编写它。获取该列表的查询是什么?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你有一个包含名为Title的字段的表。标题可能以您要查找的字符串开头,如果它以字符串开头,您只需要它。您还希望结果是截然不同的。

此查询将执行此操作。

SELECT Issue, Website, Tracker FROM `Issues` Where distinct(Title) LIKE '[SOMETHING]%'

答案 1 :(得分:1)

在这种情况下,我会尝试:

select distinct `Match` from (SELECT MID(Title,instr(Title,'[') + 1,instr(Title,']') - instr(Title,'[') -1) As 'New_Title'
FROM Issues u Where instr(Title,'[') > 0 AND instr(Title,']') > instr((Title),'[')) tbl

对不起,这花了这么长时间,我不得不弄清楚如何返回字符串。

答案 2 :(得分:0)

SELECT distinct(当标题REGEXP'^ [[]'时的情况)         concat(substring_index(title,']',1),']')end)作为标题 从test.issue我 标题REGEXP'^ [[]';