可以使用以下的SQL语句来从一个JSON字段中取出goodsId、shareKey和channelId:
SELECT JSON_EXTRACT(字段名, ‘
.
字段内
j
s
o
n
数据列’
)
a
s
A
,
J
S
O
N
E
X
T
R
A
C
T
(
字段名
,
‘
.字段内json数据列’) as A, JSON_EXTRACT(字段名, ‘
.字段内json数据列’)asA,JSONEXTRACT(字段名,‘.字段内json数据列’) as B,
JSON_EXTRACT(字段名, ‘$.字段内json数据列’) as C
FROM mytable;
json_field表示包含JSON数据的字段,mytable则是包含该字段的表名,使用JSON_EXTRACT函数,可以从JSON字段中提取特定的值。第二个参数指定要提取的值的路径。语法为:$.key,其中key是想要提取的值的键名。
去除双引号
如果JSON字段值包含双引号,并且不希望在查询结果中返回双引号,则可以使用MySQL中的函数JSON_UNQUOTE函数来去掉双引号。
SELECT JSON_UNQUOTE(JSON_EXTRACT(字段名, ‘
.
字段内
j
s
o
n
数据
列
′
)
)
a
s
A
,
J
S
O
N
U
N
Q
U
O
T
E
(
J
S
O
N
E
X
T
R
A
C
T
(
字段名
,
′
.字段内json数据列')) as A, JSON_UNQUOTE(JSON_EXTRACT(字段名, '
.字段内json数据列′))asA,JSONUNQUOTE(JSONEXTRACT(字段名,′.字段内json数据列’)) as B,
JSON_UNQUOTE(JSON_EXTRACT(字段名, ‘$.字段内json数据列’)) as C
FROM 表名;
该语句中,使用了JSON_EXTRACT函数来提取JSON数据中的值,并将其作为参数传递给JSON_UNQUOTE函数,以去掉它们周围的双引号。最后,将结果作为新的列别名返回。
这样,即使JSON字段值包含双引号,查询结果也不会包含双引号。
注意: mysql版本5.7及以上版本使用,