如何将日期从 JSON 插入到 SQL 数据库

How to insert date from JSON to SQL database

我必须将一些数据从 JSON 插入到 SQL 数据库,所以我使用以下代码:

sqlQuery1 = "DECLARE @json varchar(max)='" + inputData + "';";
sqlQuery2 = "INSERT INTO [Test].[dbo].[Work] " +
                        "SELECT [Id], [Created], [Assignee] " +
                        "FROM OPENJSON(@json) "+
                        "WITH ([Id] int '$.id',"+
                        "[Created] datetimeoffset(4) '$.fields.created',"+
                       "[Assignee] varchar(200) '$.fields.assignee.name')";
        
System.out.println(sqlQuery2); stmt.addBatch(sqlQuery1);stmt.addBatch(sqlQuery2);                    break;

$fields.created 日期格式如:"2021-03-04T07:11:40.000+0000" 我尝试使用不同的方式但无法将以上格式的日期插入 SQL。 请帮助我使用此代码将创建日期插入数据库。

提前致谢

SQL 服务器期望 datetimeoffset 字符串的时区部分包含冒号字符,即:+00:00 而不仅仅是 +0000.

您需要先将其作为 varchar/nvarchar 列从 JSON 中提取出来,这样您就可以在将其转换为 datetimeoffset 之前插入 : 字符,如下所示:

declare @json nvarchar(max) = N'{
    "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
    "id": "180",
    "fields": {
        "created": "2021-03-04T07:11:40.000+0000",
        "assignee": {
            "name": "pallavi"
        }
    }
}';

select *
from openjson(@json) with (
  [Id] int '$.id',
  [Created] varchar(29) '$.fields.created',
  [Assignee] varchar(200) '$.fields.assignee.name'
) shredded
outer apply (
  select [CreatedDatetimeoffset] = convert(datetimeoffset, stuff(Created, 27, 0, ':'))
) converted;