2015-11-04 183 views
0

我有一個紅移表「人」在特定的列有數據像這樣字符串匹配

[{"attributeName":"name","attributeMetadata":null,"attributeValue":"KitchenAid - 7-Speed Hand Mixer - White","attributeImageType":"PRODUCT","attributeStatusCodes":[]}, 
{"attributeName":"title","attributeMetadata":null,"attributeValue":"KitchenAid","attributeImageType":"PRODUCT","attributeStatusCodes":[]}, 

{"attributeName":"address","attributeMetadata":null,"attributeValue":"address","attributeImageType":"PRODUCT","attributeStatusCodes":[]}, 

{"attributeName":"PIN CODE","attributeMetadata":null,"attributeValue":"32110","attributeImageType":"IMG","attributeStatusCodes":[]}] 

我想只提取字典/ JSON /含PIN CODE子(見下文)

{"attributeName":"PIN CODE","attributeMetadata":null,"attributeValue":"32110","attributeImageType":"IMG","attributeStatusCodes":[]} 

我嘗試以下查詢,它給了以下錯誤

select distinct regexp_substr(attributes,'.*({.*?"attributeName":"PIN CODE".*?}).*') from person ; 

ERROR: Invalid content of repeat range 
DETAIL: 
    ----------------------------------------------- 
    error: Invalid content of repeat range 
    code:  8002 
    context: T_regexp_init 
    query:  528401 
    location: funcs_expr.cpp:130 
    process: query2_40 [pid=12603] 
    ----------------------------------------------- 

我猜這個問題是由於單個列中有多個attributeName而發生的。他們是達到預期結果的一種方式。

+0

你應該逃避花括號'\ {',否則它假定爲像'\ W一個量詞{ 2,5}'。這就是爲什麼它會拋出錯誤'「重複範圍的無效內容」' – Mariano

+0

@Mario抱歉沒有工作,得到了相同的錯誤 –

+0

任何機會,你可以創建一個小提琴? – Mariano

回答

1

我不知道如果我理解正確的,但是你可以嘗試使用類似:

select * from person where attributes LIKE '%"attributeName":"PIN CODE"%'; 
+0

@IvanNo我希望子字符串{「attributeName」:「PIN碼」,「attributeMetadata」:null,「attributeValue」:「32110」,「attributeImageType」:「IMG」,「attributeStatusCodes」:[]}。上面的字符串(在問題中)在單個列中 –