2012-05-01 34 views
2

私は以下のような表に文字列から値を抽出しようとしています、テーブル内の文字列から値を抽出しますか?

照会表、

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 
+1

これが人々が関係データベースと正規化を発明した理由です。データベースを正規化すると、答えは 'SELECT page_id'でした。 –

答えて

3

INTはすでにMYSQLで使用されています。正しい構文を使用する

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` 
+1

あなたのフィールド名**とエイリアス**をエスケープして、MySQLが予約された名前(INTなど)と混同しないようにします。 +1 – Oldskool

+0

申し訳ありませんが、私はまだ同じエラーが発生します... – laukok

+0

あなたのコードはどうなっていますか? –

関連する問題