我想在這樣的低於表中提取一個字符串值,從表中的字符串提取值?
查詢表,
query_id value
1 type={"page":"page"}&parent_id=10&image=on&content=on
2 type={"page":"page"}&parent_id=self
3 type={"category":"contact"}
正如你所看到的PARENT_ID是查詢,有時則不然。
我想提取PARENT_ID所以我得到這樣的結果,
query_id page_id value
1 10 type={"page":"page"}&parent_id=10&image=on&content=on
2 self type={"page":"page"}&parent_id=self
3 null type={"category":"contact"}
我嘗試此查詢,
SELECT
*,
CAST(
SUBSTRING(
value,PATINDEX('%parent_id=%', value) + 8,(PATINDEX('%&%', substring(value,PATINDEX('%parent_id=%', value),50)) - 9)
) AS INT
) AS page_id
FROM query
但是我得到這個錯誤,
1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use
near 'INT) AS page_id FROM query LIMIT 0, 30' at line 6
編輯:
也許我應該不使用PATINDEX
爲我下面的查詢進行了測試,
SELECT
*,
SUBSTRING(
value,PATINDEX('%parent_id=%', value) + 8,(PATINDEX('%&%', substring(value,PATINDEX('%parent_id=%', value),50)) - 9)
) AS test
FROM query
我得到這個錯誤,
#1305 - FUNCTION mydb.PATINDEX does not exist
編輯:
得到了我的答案,
SELECT
*,
IF(LOCATE('parent_id=', value)>0,SUBSTRING_INDEX(SUBSTRING(value,LOCATE('parent_id=', value) + 10),'&',1),null)AS page_id
FROM query
這就是爲什麼人們發明了關係數據庫和標準化。規範你的數據庫,答案應該是'SELECT page_id'。 –