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)(代码片段