mysql 解析JSON串
2014-03-04 18:01
232 查看
DELIMITER $$
DROP FUNCTION IF EXISTS fn_parseJson$$
CREATE FUNCTION fn_parseJson(p_jsonstr VARCHAR(255) character set utf8, p_key VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DECLARE rtnVal VARCHAR(255) DEFAULT '';
DECLARE v_key VARCHAR(255);
SET v_key = CONCAT('"', p_key, '":');
SET @v_flag = p_jsonstr REGEXP v_key;
IF(@v_flag = 0) THEN
SET rtnVal = '';
ELSE
SELECT val INTO rtnVal FROM (
SELECT @start_pos := locate(v_key, p_jsonstr),
@end_pos := @start_pos + length(v_key),
@tail_pos := if(locate(",", p_jsonstr, @end_pos) = 0, locate("}", p_jsonstr, @end_pos), locate(",", p_jsonstr, @end_pos)),
substring(p_jsonstr, @end_pos + 1, @tail_pos - @end_pos - 2) as val) as t;
END IF;
RETURN rtnVal;
END $$
DELIMITER;
使用样例:
SELECT fn_parseJson('{"name":"Intel Pentium III Xeon 处理器","count":"1","Manufacturer":"GenuineIntel"}', 'count') rtnVal
结果:
DROP FUNCTION IF EXISTS fn_parseJson$$
CREATE FUNCTION fn_parseJson(p_jsonstr VARCHAR(255) character set utf8, p_key VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DECLARE rtnVal VARCHAR(255) DEFAULT '';
DECLARE v_key VARCHAR(255);
SET v_key = CONCAT('"', p_key, '":');
SET @v_flag = p_jsonstr REGEXP v_key;
IF(@v_flag = 0) THEN
SET rtnVal = '';
ELSE
SELECT val INTO rtnVal FROM (
SELECT @start_pos := locate(v_key, p_jsonstr),
@end_pos := @start_pos + length(v_key),
@tail_pos := if(locate(",", p_jsonstr, @end_pos) = 0, locate("}", p_jsonstr, @end_pos), locate(",", p_jsonstr, @end_pos)),
substring(p_jsonstr, @end_pos + 1, @tail_pos - @end_pos - 2) as val) as t;
END IF;
RETURN rtnVal;
END $$
DELIMITER;
使用样例:
SELECT fn_parseJson('{"name":"Intel Pentium III Xeon 处理器","count":"1","Manufacturer":"GenuineIntel"}', 'count') rtnVal
结果:
相关文章推荐
- MySQL乱码讨论
- windows下自动备份mysql脚本
- mysql存储过程出错处理
- mysql数据库删除时出错
- MySQL用while实现for循环嵌套(插入学生成绩信息功能)
- mysql字符集问题
- rails 连接mysql
- Mysql 如何做双机热备和负载均衡 (方法二)
- Hibernate连接Mysql中文乱码处理
- Mysql 如何做双机热备和负载均衡 (方法一)
- mysql 导出查询结果集到文件
- mysql快速翻页查询方法
- 嵌入式 mysql数据库中text最大长度
- ubuntu 安装Mysql
- MySQL性能优化
- 局域网中的所有机器都能连接MySQL数据库
- 关于修改mysql账号信息导致存储过程无法访问的问题
- mysql 修改字段类型并设置默认值
- mysql timestamp 默认值当前时间
- navicat for mysql 显示中文乱码解决办法