Mysql

使用 LOCATE() 函式作為 SUBSTRING() 參數給出隨機結果。從文本中提取字元串

  • July 28, 2019

我有幾行內容很多,我正在嘗試找到一些程式碼並提取它。它看起來像這樣:

Some code...
<div> </div>

<div>[flv:http://submarino-libre.s3.amazonaws.com/opciones/basico/webready/Video1CursoOpcionesbasicoWebReady.mp4 http://www.submarinobursatil.com/imagenes/portadas/curso-de-opciones.png 600 369]</div>

<div align="left">Duración: 09:56</div>
Some other code...

發現我需要找到[flv:並提取所有以結尾的行(2個連結)]

所以我提出了這個查詢:

SELECT SUBSTRING(`post_content`, LOCATE('[flv:',`post_content`), LOCATE(']',`post_content`)) AS amazonlinks
FROM  posts

第一個 LOCATE 函式工作正常,它發現[flv:但第二個 LOCATE 函式不會停止查詢提取]。它從下一行獲得更多程式碼。它僅在我設置一個數字時才有效,但我無法知道確切的長度數字。

是否可以使用 2 LOCATE 函式作為 SUBSTRING 的參數?或者我做錯了什麼?

更新:添加 DBFiddle: https ://www.db-fiddle.com/f/m62LBUStp1UbRCk2eVNRrY/0

Substrings 第一個參數是偏移量,第二個參數是從偏移量開始的字元數。您需要從第二個參數中減去偏移量:

SELECT title
    , SUBSTRING(`content`
               -- offset in string
               ,LOCATE('[flv:',`content`)
               -- number of characters from offset
               ,LOCATE(']',`content`) - LOCATE('[flv:',`content`) + 1 ) 
FROM amazonlinks

我添加了 +1 以在結果中包含“]”

引用自:https://dba.stackexchange.com/questions/243976