開發過程中用到了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 複製鏈結 也許由於最近心情不好,這兩天也在工作和人較起了真,這可和咱平時與人為善,不窮追猛打的作風有出入。這不,昨天剛就乙個究竟是基本設計 詳細設計和 製造中的哪個環節出錯的問題和乙個同事爭論得口乾舌燥,今天又心情...