提供一个解析这个json字符串feedetail节点信息的sqlserver 方法json字符串如下 arg0 infno 2204 msgid H34132200104202201040802260001 mdtrtarea_admvs 341322 insuplc_admdvs 341322 recer_sys_code MBS_LOCAL dev_no dev_safe_
由于SQL Server 2016及以上版本支持JSON数据类型和JSON函数,可以使用 OPENJSON 函数来解析 JSON 字符串中的节点信息。具体操作步骤如下:
- 创建一个临时表,用于存储解析后的 JSON 数据:
CREATE TABLE #temp_table ( feedetl_sn VARCHAR(50), mdtrt_id VARCHAR(50), psn_no VARCHAR(50), chrg_bchno VARCHAR(50), dise_codg VARCHAR(50), rxno VARCHAR(50), rx_circ_flag VARCHAR(50), fee_ocur_time VARCHAR(50), med_list_codg VARCHAR(50), medins_list_codg VARCHAR(50), det_item_fee_sumamt VARCHAR(50), cnt VARCHAR(50), pric VARCHAR(50), sin_dos_dscr VARCHAR(50), used_frqu_dscr VARCHAR(50), prd_days VARCHAR(50), medc_way_dscr VARCHAR(50), bilg_dept_codg VARCHAR(50), bilg_dept_name VARCHAR(50), bilg_dr_codg VARCHAR(50), bilg_dr_name VARCHAR(50), acord_dept_codg VARCHAR(50), acord_dept_name VARCHAR(50), orders_dr_code VARCHAR(50), orders_dr_name VARCHAR(50), hosp_appr_flag VARCHAR(50), tcmdrug_used_way VARCHAR(50), etip_flag VARCHAR(50), etip_hosp_code VARCHAR(50), dscg_tkdrug_flag VARCHAR(50), matn_fee_flag VARCHAR(50) )
- 使用 OPENJSON 函数解析 JSON 字符串中的 feedetail 节点信息,并将解析后的数据插入临时表中:
INSERT INTO #temp_table ( feedetl_sn, mdtrt_id, psn_no, chrg_bchno, dise_codg, rxno, rx_circ_flag, fee_ocur_time, med_list_codg, medins_list_codg, det_item_fee_sumamt, cnt, pric, sin_dos_dscr, used_frqu_dscr, prd_days, medc_way_dscr, bilg_dept_codg, bilg_dept_name, bilg_dr_codg, bilg_dr_name, acord_dept_codg, acord_dept_name, orders_dr_code, orders_dr_name, hosp_appr_flag, tcmdrug_used_way, etip_flag, etip_hosp_code, dscg_tkdrug_flag, matn_fee_flag ) SELECT feedetl_sn, mdtrt_id, psn_no, chrg_bchno, dise_codg, rxno, rx_circ_flag, fee_ocur_time, med_list_codg, medins_list_codg, det_item_fee_sumamt, cnt, pric, sin_dos_dscr, used_frqu_dscr, prd_days, medc_way_dscr, bilg_dept_codg, bilg_dept_name, bilg_dr_codg, bilg_dr_name, acord_dept_codg, acord_dept_name, orders_dr_code, orders_dr_name, hosp_appr_flag, tcmdrug_used_way, etip_flag, etip_hosp_code, dscg_tkdrug_flag, matn_fee_flag FROM OPENJSON( '{"arg0": {"infno": "2204", "msgid": "H34132200104202201040802260001", "mdtrtarea_admvs": "341322", "insuplc_admdvs": "341322", "recer_sys_code": "MBS_LOCAL", "dev_no": "", "dev_safe_info": "", "cainfo": "", "signtype": "SM2", "infver": "V1.0", "opter_type": "1", "opter": "29", "opter_name": "朱慧", "inf_time": "2022-01-04 08:02:26", "fixmedins_code": "H34132200104", "fixmedins_name": "萧县白土镇中心卫生院", "sign_no": "34130103368111", "input": {"feedetail": [{"feedetl_sn": "535143", "mdtrt_id": "341301043723488", "psn_no": "34130000525003726933", "chrg_bchno": "202201040010", "dise_codg": "", "rxno": "202201040010", "rx_circ_flag": "0", "fee_ocur_time": "2022-01-04 07:52:23", "med_list_codg": "002203010020000-220301002", "medins_list_codg": "0200000403", "det_item_fee_sumamt": "77.00", "cnt": "1.000000", "pric": "77.000000", "sin_dos_dscr": "", "used_frqu_dscr": "", "prd_days": "0", "medc_way_dscr": "", "bilg_dept_codg": "3", "bilg_dept_name": "内科", "bilg_dr_codg": "2", "bilg_dr_name": "王全明", "acord_dept_codg": "3", "acord_dept_name": "张建", "orders_dr_code": "2", "orders_dr_name": "王全明", "hosp_appr_flag": "1", "tcmdrug_used_way": "2", "etip_flag": "0", "etip_hosp_code": "", "dscg_tkdrug_flag": "0", "matn_fee_flag": "0"}, {"feedetl_sn": "535144", "mdtrt_id": "341301043723488", "psn_no": "34130000525003726933", "chrg_bchno": "202201040010", "dise_codg": "", "rxno": "202201040010", "rx_circ_flag": "0", "fee_ocur_time": "2022-01-04 07:52:23", "med_list_codg": "002208000080000-220800008", "medins_list_codg": "0200000467", "det_item_fee_sumamt": "7.70", "cnt": "1.000000", "pric": "7.700000", "sin_dos_dscr": "", "used_frqu_dscr": "", "prd_days": "0", "medc_way_dscr": "", "bilg_dept_codg": "3", "bilg_dept_name": "内科", "bilg_dr_codg": "2", "bilg_dr_name": "王全明", "acord_dept_codg": "3", "acord_dept_name": "张建", "orders_dr_code": "2", "orders_dr_name": "王全明", "hosp_appr_flag": "1", "tcmdrug_used_way": "2", "etip_flag": "0", "etip_hosp_code": "", "dscg_tkdrug_flag": "0", "matn_fee_flag": "0"}]}}' ) WITH ( feedetail NVARCHAR(MAX) '$.arg0.input.feedetail' AS JSON ) CROSS APPLY OPENJSON(feedetail) WITH ( feedetl_sn VARCHAR(50) '$.feedetl_sn', mdtrt_id VARCHAR(50) '$.mdtrt_id', psn_no VARCHAR(50) '$.psn_no', chrg_bchno VARCHAR(50) '$.chrg_bchno', dise_codg VARCHAR(50) '$.dise_codg', rxno VARCHAR(50) '$.rxno', rx_circ_flag VARCHAR(50) '$.rx_circ_flag', fee_ocur_time VARCHAR(50) '$.fee_ocur_time', med_list_codg VARCHAR(50) '$.med_list_codg', medins_list_codg VARCHAR(50) '$.medins_list_codg', det_item_fee_sumamt VARCHAR(50) '$.det_item_fee_sumamt', cnt VARCHAR(50) '$.cnt', pric VARCHAR(50) '$.pric', sin_dos_dscr VARCHAR(50) '$.sin_dos_dscr', used_frqu_dscr VARCHAR(50) '$.used_frqu_dscr', prd_days VARCHAR(50) '$.prd_days', medc_way_dscr VARCHAR(50) '$.medc_way_dscr', bilg_dept_codg VARCHAR(50) '$.bilg_dept_codg', bilg_dept_name VARCHAR(50) '$.bilg_dept_name', bilg_dr_codg VARCHAR(50) '$.bilg_dr_codg', bilg_dr_name VARCHAR(50) '$.bilg_dr_name', acord_dept_codg VARCHAR(50) '$.acord_dept_codg', acord_dept_name VARCHAR(50) '$.acord_dept_name', orders_dr_code VARCHAR(50) '$.orders_dr_code', orders_dr_name VARCHAR(50) '$.orders_dr_name', hosp_appr_flag VARCHAR(50) '$.hosp_appr_flag', tcmdrug_used_way VARCHAR(50) '$.tcmdrug_used_way', etip_flag VARCHAR(50) '$.etip_flag', etip_hosp_code VARCHAR(50) '$.etip_hosp_code', dscg_tkdrug_flag VARCHAR(50) '$.dscg_tkdrug_flag', matn_fee_flag VARCHAR(50) '$.matn_fee_flag' )
- 查询临时表中的数据,即可获取 feedetail 节点中的详细信息:
SELECT * FROM #temp_table
注意:此方法需要使用 JSON 数据类型和 JSON 函数,因此仅适用于 SQL Server 2016 及以上版本。如果使用的是早期版本的 SQL Server,可能需要使用其他第三方工具或自定义函数来解析 JSON 字符串中的节点信息
原文地址: https://www.cveoy.top/t/topic/g7xe 著作权归作者所有。请勿转载和采集!