如何将日期从 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;
我必须将一些数据从 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;