2012-02-21 66 views
0

内的桌子,还有就是有一些JSON编码数据的PARAMS行 - 这样:MySQL的替换语法 - 换指定的文本

{"categories":211,"singleCatOrdering":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","menu_text":1,"page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0} 

我需要做的是包裹[]各地categories参数 - 看起来这样:

{"categories":[211],"singleCatOrdering":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","menu_text":1,"page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0} 

我曾尝试以下(和很多其他的那些失败的),没有骰子:

UPDATE j17_menu SET params = REPLACE(params,'"categories":%,','"categories":[%],') WHERE component_id = 10021; 

我可能使用通配符选项错误?任何向正确的方向推动将是一个巨大的帮助。谢谢!

+1

是第二个参数总是“singleCatOrdering”的?如果这样用两个替代,一个用于第一个方括号,一个用于最后一个。 – Jrod 2012-02-21 16:32:14

+0

谢谢 - 完美的工作! – Zach 2012-02-21 16:40:09

回答

1

这人会独立工作的背景下

UPDATE j17_menu 
SET params=CONCAT (
    SUBSTR(params,1,LOCATE('"categories":',params)), 
    '"categories":[', 
    substr(
     params, 
     LOCATE('"categories":',params)+13, 
     LOCATE(',',params,LOCATE('"categories":',params))-LOCATE('"categories":',params)-13 
    ), 
    ']', 
    substr(params,LOCATE(',',params,LOCATE('"categories":',params))) 
) 
WHERE component_id = 10021;