当前位置: 首页 > news >正文

SQL Server 2014 利用SubString获取Json格式指定字段数据

Json函数(Transact-SQL)适用于SQL Server2016(13.x)及更高版本,13.x以下的版本没有提供Json类型的格式化读取操作。

如果你本地的SQL Server数据库是2016 v13.x及以上版本,可直接参考如下链接的JSON函数:

JSON 函数 (Transact-SQL)

此处利用Substring和CHARINDEX提供简单的截取方式解析Json数据,数据库是SQL Server 2014。

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

expressionToFind
一个字符表达式,其中包含要查找的序列。 expressionToFind 限制为 8000 个字符 。

expressionToSearch
要搜索的字符表达式。

start_location
表示搜索开始位置的 integer 或 bigint 表达式 。 如果 start_location 未指定、具有负数值或 0,搜索将从 expressionToSearch 的开头开始 。

SUBSTRING ( expression, start, length ) 

expression
为 character、binary、text、ntext 或者 image 表达式。

start
指定返回字符的起始位置的整数或 bigint 表达式 。 (编号从 1 开始,意味着表达式中的第一个字符为 1)。 如果 start 小于 1,则返回的表达式的起始位置为表达式中指定的第一个字符 。 在这种情况下,返回的字符数是后两者中的较大值:start + length 之和减去 1,0。 如果 start 大于值表达式中的字符数,将返回一个零长度的表达式 。

length
是正整数或用于指定要返回的 expression 的字符数的 bigint 表达式 。 如果 length 是负数,会生成错误并终止语句 。 如果 start 和 length 的总和大于表达式中的字符数,则会返回从 start 开始的整个值表达式 。

Json格式:

{"companyId":1,"creditAgreementIds":[4122],"startDate":"12/06/2024","endDate":"12/27/2024"}

数据表结构和数据初始化实例。


declare  @TestJsonExtract table(Id int, JsonColumn nvarchar(max))

insert into @TestJsonExtract(Id,JsonColumn) values(1,'{"companyId":1,"creditAgreementIds":[4122],"startDate":"12/06/2024","endDate":"12/27/2024"}')
insert into @TestJsonExtract(Id,JsonColumn) values(2,'{"companyId":1,"creditAgreementIds":[4122,123456,7890],"startDate":"01/06/2025","endDate":"04/14/2025"}')

获取StartDate和EndDate

--定义Key
declare @StartDate varchar(50)='"startDate":"'
declare @EndDate varchar(50)='"endDate":"'
select 
 StartDate=CONVERT(DATETIME,SUBSTRING(JsonColumn,CHARINDEX(@StartDate,JsonColumn)+len(@StartDate),10))
,EndDate=CONVERT(DATETIME,SUBSTRING(JsonColumn,CHARINDEX(@EndDate,JsonColumn)+len(@EndDate),10))
,DayDiff=DATEDIFF(DAY
	,CONVERT(DATETIME,SUBSTRING(JsonColumn,CHARINDEX(@StartDate,JsonColumn)+len(@StartDate),10))
	,CONVERT(DATETIME,SUBSTRING(JsonColumn,CHARINDEX(@EndDate,JsonColumn)+len(@EndDate),10))
)

from @TestJsonExtract 

输出结果:

StartDateEndDate                                    DayDiff
2024-12-06 00:00:00.0002024-12-27 00:00:00.000 21
2025-01-06 00:00:00.0002025-04-14 00:00:00.00098

                            

相关文章:

  • 微信小程序无缝衔接弹幕效果纯CSS
  • JAVA Web_定义Servlet2_学生登录验证Servlet
  • 005_多表查询
  • 在Vue 中如何使用动态样式
  • asp.net Kestrel 和iis区别
  • 基于OpenCV与PyTorch的智能相册分类器全栈实现教程
  • 耘想WinNAS:以聊天交互重构NAS生态,开启AI时代的存储革命
  • 【后端开发】Spring配置文件
  • ubuntu22.04-VMware Workstation移动后无法连接网络
  • 【视频目标分割论文集】Efficient Track Anything0000
  • 【深度学习与大模型基础】第11章-Bernoulli分布,Multinoulli分布
  • LeetCode 热题 100_单词拆分(86_139_中等_C++)(动态规划)
  • 【从C到C++的算法竞赛迁移指南】第五篇:现代语法糖精粹 —— 写出优雅的竞赛代码
  • 豪越消防一体化安全管控平台:构建消防“一张图”新生态
  • Java Web 300问
  • 大数据(7.4)Kafka存算分离架构深度实践:解锁对象存储的无限潜能
  • STM32基础教程——AD单通道
  • 一款安全好用的企业即时通讯平台,支持统一门户
  • 单链表各种操作实现(数据结构C语言多文件编写)
  • 中介者模式:理论、实践与 Spring 源码解析
  • 钕铁硼永磁材料龙头瞄准人形机器人,正海磁材:已向下游客户完成小批量供货
  • 澎湃·镜相第二届非虚构写作大赛初选入围名单公示
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 万科再获深铁集团借款,今年已累计获股东借款近120亿元
  • 绿景中国地产:洛杉矶酒店出售事项未能及时披露纯属疏忽,已采取补救措施
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查