最近是和mysql杠上了。由于需要将公司数据中台中的数据同步到我们自己的mysql库中,并且使用的是将sql结果集全量同步过来的方式,就促使我在用平台的时候,接触到了大量的sql使用场景。今天遇到的是如何使用sql拼写json, 和大家分享一下。
这里说明下,如果大家的业务本身可以通过api的方式来实现,那么就没必要在sql来实现了。我们的业务需求是必须用sql实现,所以才这么搞的,你们都不知道,这段时间我是有多么怀念java语言,怀念在idea上纵横驰骋的日子。。。
好了闲话少说,我们直接步入正题。先给出原表数据test
id | name | type | num1 | num2 | num3 | num4 |
---|---|---|---|---|---|---|
1 | 实验小学 | 小学 | 1 | 2 | 3 | 4 |
2 | 外国语学校 | 高中 | 5 | 6 | 7 | 8 |
3 | 第七中学 | 初中 | 9 | 10 | 11 | 12 |
好了,而我最终想的结果是:
id | name | type | content |
---|---|---|---|
1 | 实验小学 | 小学 | {'num1':'1','num2':'2','num3':'3','num4':'4'} |
2 | 外国语学校 | 高中 | {'num1':'5','num2':'6','num3':'7','num4':'8'} |
3 | 第七中学 | 初中 | {'num1':'9','num2':'10','num3':'11','num4':'12'} |
这表实在太难做了,大家记得给我点赞哈。码字不易。 这个应该都看懂了吧,就是我想把最后几列的数据,以json的方式存储到content字段中(别问我为什么会有这样的需求,他就是有)。给出查询的sql.
select
id, name, type,CONCAT(
'{',
CONCAT_WS(',',
CONCAT('"','num1', '":"', num1, '"'),
CONCAT('"','num2', '":"', num2, '"'),
CONCAT('"','num3', '":"', num3, '"'),
CONCAT('"','num4', '":"', num4, '"')
),
'}'
)content from test
复制代码
执行完毕后就能得到我们你想要的结果了。好了今天内容介绍到这。在强调一下,能用语言操作,尽量别用sql,除非万不得已。因为真的恶心,还慢,还麻烦。