SQL中OPENJSON函式JSON到表行資料轉換

2021-08-14 14:13:07 字數 1549 閱讀 5337

開發過程中用到了mq以json進行資料互動,接收過程中有部分資料不完整導致錯誤未能入庫。偶然間看到sql有openjson函式可對json資料進行表資料轉換。於是就有了下文,對學習的過程記錄下。

預設情況下解析json串裡的第一層元素:

指令碼:

declare @json nvarchar(max)

set @json='';

select *

from openjson(@json);

結果:

數值:declare @json nvarchar(max)

set @json=',]}'

select [key], value

from openjson(@json,'$.mylist')

結果:

取數值裡值生成行資料

指令碼:declare @json nvarchar(max)

set @json='[,]'

select *

from openjson(@json)

with (   

myname varchar(50)   '$.name',   

age varchar(15)   '$.age'

)結果:

如果想將表裡單列裡的json串輸出為表行,通過將表裡json字元列轉化下(多行json合併為單列後 作為上面的@json引數傳入即可)

select *

from openjson(

( select '['+stuff((

select ',' + replace(replace(replace(msgjson,'\"','"'),'""','}')

from t_mqmsginfo where msgtype='fk'

for xml path('')),

1,1,'')+']' ))

with (

clientid varchar(15) '$.businessmsgdata.clientid',

clientname varchar(50) '$.businessmsgdata.clientname'

)

for xml path('')主要是用來將多行合成一列,stuff將xml轉換成字串

結果:

有不明白的可以多試下。

Sql中的getDate 函式

sql server 中乙個非常強大的日期格式化函式 select convert varchar 100 getdate 0 05 16 2006 10 57am select convert varchar 100 getdate 1 05 16 06 select convert varcha...

sql中的datediff 函式

返回 variant long 的值,表示兩個指定日期間的時間間隔數目。語法datediff interval,date1,date2 firstdayofweek firstweekofyear datediff 函式語法中有下列命名引數 部分 描述 interval 必要。字串表示式,表示用來計...

SQL中的Stuff 函式

sql中的stuff 函式 soloist發表日期 2008 07 18 20 49 複製鏈結 也許由於最近心情不好,這兩天也在工作和人較起了真,這可和咱平時與人為善,不窮追猛打的作風有出入。這不,昨天剛就乙個究竟是基本設計 詳細設計和 製造中的哪個環節出錯的問題和乙個同事爭論得口乾舌燥,今天又心情...