2014-10-20 50 views
0

我觉得这不应该这么难,但我想查询一个字符串发生的长文本字段:"<blog:"。我希望它返回这个字符串,最好通过它的结尾">" Substring_Index似乎并没有为我做这个。有什么建议么?我目前有:子串只返回查询字符串+ 10 char

 SELECT body, SUBSTRING(`body`, LOCATE("<blog:", body),20)as blogCat 
     from T1;  

并且这返回所有字符串,这是很多数据。理想情况下,我希望它停在第一个“>” - 这可能吗?

+0

您可以更改您的问题,可能需要输入和输出示例吗?如果我正确地理解了你的话,'SUBSTRING_INDEX'将不起作用,因为它返回一个从最左边的字符开始N-1个字符的子字符串,其中N等于给定分界符的位置。我只是想确保我正确地理解你。 – 9ee1 2014-10-20 17:23:34

+0

我添加了我所拥有的,并希望清除它。 – caro 2014-10-20 17:31:01

回答

0

可以使用后< 博客LOCATE多次

拿到第一>,然后使用子

SQL Fiddle

SELECT body, SUBSTRING(`body`, LOCATE("<blog:", body), 
         LOCATE(">", body, LOCATE("<blog:", body)) 
         - LOCATE("<blog:", body) +1 
        )as blogCat 
FROM T1; 
+0

今天你是最酷的人。谢谢。 – caro 2014-10-20 18:02:05

0

从我的理解,你”得到这两个字符串之间的唯一字符串重新寻找在S1和S2之间发生的子字符串。在这种情况下,试试这个(我没有测试语法):

SELECT 
    SUBSTRING(body, LOCATE("<blog:", body), LOCATE(">", body, LOCATE("<blog:", body)) - LOCATE("<blog:", body)) 
FROM 
    T1 

在一个侧面说明,我不知道怎么样,你的榜样,你得到所有的整个字符串像你自称因为你显然限制你的子字符串为20个字符。

+0

我意识到在保存编辑后,我在测试中将其留在了那里。 – caro 2014-10-20 18:01:02