2014-10-20 53 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