sqlは文字列タイプフィールドから値を取ってマッチングします。

1550 ワード

フィールドのようなservice_アイテム、中身は大体以下の通りです。
{"categoryId":"01","category":"  ","name":"  ","code":"01","desc":"    ","value":"250.00"}
このフィールド内の文字列の中のidとcodeに合わせて、valueを取得したいです。
1、idを取得する
select substr(service_item, instr(service_item,'"categoryId":"')+14, 2) categoryId from table;
2、コードを取得する
select substr(service_item, instr(service_item,'"code":"')+8, 2) code from table;
3、idとcodeをマッチングしてからvalueを取得する
  select substr(substr(service_item, instr(service_item,'"value":"') +9),0,instr(substr(service_item, instr(service_item,'"value":"')+9),'"')-1 )val 
 from table;
4、合併前の三つのsql
select * from(
       select business_id,
              substr(service_item, instr(service_item,'"categoryId":"')+14, 2) categoryId , 
              substr(service_item, instr(service_item,'"code":"')+8, 2) codeId , 
              substr(substr(service_item, instr(service_item,'"value":"') +9),0,
              instr(substr(service_item, instr(service_item,'"value":"')+9),'"')-1 )unloadDays,service_item 
              from table)
               where categoryId='00' and codeId= '01';
実際に格納された文字列の位置とマッチする文字列の違いによって、sqlに対応する数字とマッチする項目を変更すればいいです。
ありがとうございます