当前具有以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/

10-11 21:56