私は以下のような表に文字列から値を抽出しようとしています、テーブル内の文字列から値を抽出しますか?
照会表、
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が時々クエリであると見ることができるようではありません。
私は
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
EDIT、しかし私はこのエラーを取得する
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
、私はこのクエリを使用してみてください
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"}
、私はこの結果を得るように、PARENT_IDを抽出したいです:
以下のクエリで、私はそれをテストしたとして、たぶん私は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
EDIT:
を手に入れた私の答え、
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'でした。 –