sql server 中 json_modify
的使用
intro
sql server 从 2016 开始支持了一些 json操作,最近的项目里也是好多地方字段直接存成了 json,需要了解一下怎么在sql server 中操作 json.
json支持适用于 sql server 2016 及以上版本 和 azure sql database。
最近在项目中很多地方字段都是存一个 json
字符串,尤其是针对一些有很多不确定的属性的数据来说,这样的信息我们一般都放在一个 extra
之类的字段保存一个 json
字符串,由于不确定性很大,很有可能会遇到要修改这个 json
字符串结构的问题,在修改 json
对象的某一个值和修改 json
的结构时都会用到 json_modify
,今天就来介绍一下 json_modify
的使用
示例
直接来看示例:
-- json_modify 测试 declare @testjsonvalue nvarchar(100) = n'{"name":"john","skills":["c#","sql"]}'; print @testjsonvalue; -- 适用 append 在数组中追加元素 print json_modify(@testjsonvalue, 'append $.skills', 'azure'); -- 无效用法,这样会把属性更新为字符串 print json_modify(@testjsonvalue, '$.skills', '["c#","t-sql","azure"]'); -- 修改数组 print json_modify(@testjsonvalue, '$.skills', json_query('["c#","t-sql","azure"]')); -- 修改数组某个元素 print json_modify(@testjsonvalue, '$.skills[0]', 'csharp'); -- 增加属嵌套 print json_modify(@testjsonvalue, '$.likes', json_query('{"girl": "alice"}')); print json_modify(@testjsonvalue, '$.likes', json_query('{"animals": ["dog","cat"]}')); -- 增加 bool 属性 print json_modify(@testjsonvalue, '$.showawardsafterquizends', convert(bit, 'false')); print json_modify(@testjsonvalue, '$.showawardsafterquizends', convert(bit, 1)); -- 增加 int 属性 print json_modify(@testjsonvalue, '$.totalwinnerscount', convert(int, '20')); print json_modify(@testjsonvalue, '$.totalwinnerscount', 20); -- 删除属性 print json_modify(@testjsonvalue, '$.name', null);
输出结果如下图:
more
注意:
-
如果要更新的字段没有是一个 json 对象或是一个数组,那么需要使用
json_query
,否则更新的对应的属性就成了字符串了。 -
如果是要删除某一个属性,把某一个属性更新为
null
即可 -
如果要增加一个 bool 类型的属性,需要把对应的值转换为 bit 类型