当前具有以JSON格式格式化的startDate和EndDate,并尝试使用DATEDIFF函数使用OPENJSON来计算年份差异。
我目前正在尝试以下
DECLARE @Json VARCHAR(4000) = '
{
"Name": "bob",
"StartDate": "12/02/2015",
"EndDate": "12/02/2016"
}';
SELECT Name ,
StartDate ,
EndDate
FROM OPENJSON(@Json, '$')
WITH (Name VARCHAR(50), StartDate DATETIME2, EndDate DATETIME2
,DATEDIFF(YEAR, StartDate DATETIME2, EndDate DATETIME2) INT AS Duration
)
WHERE Name = 'bob'
但是,我收到错误消息:
Msg 102,第15级,状态1,第15行
'('附近的语法不正确。
有人知道我可以做什么吗?还是提出另一种方式?我想避免创建临时表,将其插入其中,然后在可能的情况下使用DATEDIFF对其进行读取。
最佳答案
我没有使用OPENJSON
,但WITH
部分不应包含Duration
列的定义(而不是DATEDIFF
),然后将DATEDIFF
移至SELECT
。像这样:
DECLARE @Json VARCHAR(4000) = '
{
"Name": "bob",
"StartDate": "12/02/2015",
"EndDate": "12/02/2016"
}';
SELECT Name ,
StartDate ,
EndDate ,
DATEDIFF(YEAR, StartDate, EndDate) AS Duration
FROM OPENJSON(@Json, '$')
WITH (Name VARCHAR(50), StartDate DATETIME2, EndDate DATETIME2, Duration INT
)
WHERE Name = 'bob'
或者只是在
DATEDIFF
中执行SELECT
:SELECT Name ,
StartDate ,
EndDate ,
DATEDIFF(YEAR, StartDate, EndDate) AS Duration
FROM OPENJSON(@Json, '$')
WITH (Name VARCHAR(50), StartDate DATETIME2, EndDate DATETIME2)
WHERE Name = 'bob'
关于sql-server - DATEDIFF SQL Server 2016 JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37614687/