SQL中Json操作

Posted python爱好部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中Json操作相关的知识,希望对你有一定的参考价值。

有时候用python对SQL中的数据进行处理时,发现数据库里面存储的本来就是json, 如果我用python去处理,很是费力。
这里有一个简单的方法,就是SQL Server本来就支持json

随着JSON的流行,SQL Server2016开始支持JSON数据类型,不仅可以直接输出JSON格式的结果集,还能读取JSON格式的数据。对于有用到JSON格式的应用程式来说,这无疑是一利器,因为不再需要使用JSON.Net这类工具进行分析和处理JSON数据,直接利用SQL Server内置函数就可以处理,轻松将查询结果输出为JSON格式,或者搜索JSON文件内容。下面通过实例的方式,展现SQL Server 2016这一新功能。

1. 将查询结果输出JSON格式
要将SELECT语句的结果以JSON输出,最简单的方法是在后面加上FOR JSON AUTO:
若要为FOR JSON加上Root Key,可以用ROOT选项来自定义ROOT Key的名称:
若要自定义输出JSON格式的结构是,必须使用JSONPATH。若SELECT的列中,存在列名名称相同时,必须用别名重命名才能正常查询,
为NULL的数据在输出JSON时,会被忽略,若想要让NULL的字段也显示出来,可以加上选项INCLUDE_NULL_VALUES,该选项也适用于AUTO。

2.1 JSON 函数

使用本节中页面中描述的功能来验证或更改JSON文本或提取简单或复杂的值。


image


有关在SQL Server中内置JSON支持的更多信息,请参阅JSON数据(SQL Server)


2.2 ISJSON

测试字符串是否包含有效的JSON。
参数:
表达式: 要测试的字符串
返回值:
如果字符串红包含有效的json,则返回1;否则返回0
例子:

DECLARE @param <data type>
SET @param = <value>
IF (ISJSON(@param) > 0)BEGINEND

以下返回列包含有效JSON的行。

SELECT id,json_col
FROM tab1
WHERE ISJSON(json_col) >0

2.3 JSON_VALUE
从JSON字符串中提取标量值。

要从JSON字符串而不是标量值中提取对象或数组,请参阅JSON_QUERY(Transact-SQL)。有关JSON_VALUE和JSON_QUERY之间的差异的信息,请参阅比较JSON_VALUE和JSON_QUERY。

2.4 JSON_QUERY
从JSON字符串中提取对象或数组。

要从JSON字符串而不是对象或数组中提取标量值,请参阅JSON_VALUE(Transact-SQL)。有关JSON_VALUE和JSON_QUERY之间的差异的信息,请参阅比较JSON_VALUE和JSON_QUERY。

2.5 JSON_MODIFY
更新JSON字符串中的属性值,并返回更新的JSON字符串。

举个例子:
如果我需要对以下结果找出日期最小的:

 SELECT * 
 FROM school_7..StudentCourseItem 
 WHERE Student_id = 11449387 AND ItemType_id = 2 

需要拿出数据,将字符串转化为时间,然后比较大小。
如果用以下语句:

 SELECT DATEADD(HOUR,+1,min(JSON_VALUE(ExtraData,'$.enrollDate')))  as [enroll_date] 
 FROM school_7..StudentCourseItem 
 WHERE Student_id = 11449387 AND ItemType_id = 2 
 AND JSON_VALUE(ExtraData,'$.levelNo') in (7,8,9)

一条语句就够了。
好处显然易见。

参考: https://www.cnblogs.com/wangjiming/p/7407530.html
https://blog.csdn.net/weixin_39934264/article/details/80450591


以上是关于SQL中Json操作的主要内容,如果未能解决你的问题,请参考以下文章

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

sql 数据操作片段

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

如何在android中将json数据加载到片段中

json 个人的vscode的代码片段

实用代码片段将json数据绑定到html元素 (转)