mysql 拼接json字符串_mysql - json串新增字段

1、建表

--建表

drop table if existsta_product2;CREATE TABLEta_product2(

idint primary keyauto_increment,

productCodevarchar(50) comment '产品Code',

productAttrJsontext comment '产品json串')engine=innodb;

2、插入数据

--插入数据

INSERT INTO ta_product2 VALUES(NULL, '20170109001','{\"saleAmount\":\"100\",\"productName\":\"20160620,-qbs002,金融\"}');

id productCode productAttrJson

------ ----------- --------------------------------------------------------------

1 20170109001 {"saleAmount":"100","productName":"20160620,-qbs002,金融"}

3、拼接后的完整json串

SELECT t.productCode, REPLACE(

t.productAttrJson,'}',

CONCAT(',"productCode":' , '"', t.productCode , '"', RIGHT(t.productAttrJson,1))

) PRODUCT_ATTR_JSONFROM ta_product2 t

productCode PRODUCT_ATTR_JSON----------- ------------------------------------------------------------------------------------------

20170109001 {"saleAmount":"100","productName":"20160620,-qbs002,金融","productCode":"20170109001"}

4、最终update sql

--上面已经看到了我们想要的json串,现在只需要update就可以了

UPDATE ta_product2 t4 SET t4.productAttrJson =(SELECT t2.productAttrJson FROM(SELECT t.productCode, REPLACE(

t.productAttrJson,'}',

CONCAT(',"productCode":' , '"', t.productCode , '"', RIGHT(t.productAttrJson,1))

) productAttrJsonFROMta_product2 t

) t2WHERE t2.productCode=t4.productCode

)WHERE LOCATE('productCode',t4.productAttrJson) <= 0;

5、查询结果已经修改了

id productCode productAttrJson------ ----------- ------------------------------------------------------------------------------------------

1 20170109001 {"saleAmount":"100","productName":"20160620,-qbs002,金融","productCode":"20170109001"}

6、函数解释

RIGHT

--从json串最右边获取第一个字符

select RIGHT(t.productAttrJson,1) FROM ta_product2 t;

RIGHT(t.productAttrJson,1)----------------------------

}

CONCAT

--拼接要追加的字符串

SELECT CONCAT(',"productCode":' , '"', t.productCode , '"', RIGHT(t.productAttrJson,1)) FROM ta_product2 t;

CONCAT(',"productCode":' , '"', t.productCode , '"', RIGHT(t.productAttrJson,1))----------------------------------------------------------------------------------

,"productCode":"20170109001"}

LOCATE

--对locate解释下,返回出现的角标位置,从0开始,没找到返回0。

SELECT LOCATE('productCode',t4.productAttrJson) FROM ta_product2 t4;

LOCATE('productCode',t4.productAttrJson)------------------------------------------

58

你可能感兴趣的:(mysql,拼接json字符串)