Azure MSSQL - 将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围
Azure MSSQL - The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value
我在 Azure SQL 数据库 (MSSQL) 中有一列将 JSON 信息存储为 VARCHAR。其中一个字段是 'date' ,它是一个字符串。现在我想要 select 行基于某些条件。该查询适用于 - event_type 和 component_type 等条件,但是,它不适用于日期条件。
我想使用 start_date 和 end_date 之类的输入进行查询,这些输入将是 string/varchar 和 select 行,这些行将大于 start_date 并且小于 end_date.
我正在使用的查询:
SELECT event_log FROM [dbo].[tblEventStore] where JSON_VALUE(event_log, '$.instance_id') LIKE 'XTO-TEST-45' AND
JSON_VALUE(event_log, '$.event_type') LIKE 'create' AND JSON_VALUE(event_log, '$.component_type') LIKE 'webapp'
AND CAST(JSON_VALUE(event_log, '$.date') as DATETIME2) BETWEEN '2021/09/02 12:00:00' and '2021/09/02 15:00:00'
JSON:
{
"requesting_user": "",
"event_type": "create",
"instance_id": "XTO-TEST-45",
"component_type": "webapp",
"date": "02/09/2021, 14:01:18",
"request": {
"webapp": "testwebappmanjug48",
"os": "linux",
"is_containerized_webapp": "false"
},
"provisioning_status": "request received"
}
错误:
Msg 241, Level 16, State 1, Line 10
Conversion failed when converting date and/or time from character string.
另一个查询:
SELECT CONVERT(datetime, JSON_VALUE(event_log, '$.date'), 110) FROM [dbo].[tblEventStore]
异常:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
您使用的格式不是 convert()
易于识别的格式。因此,您可以分别转换日期和时间组件:
select convert(datetime, left(JSON_VALUE(event_log, '$.date'), 10), 103) + convert(datetime, right(JSON_VALUE(event_log, '$.date'), 8))
一般来说,如果您想将 date/time 值存储为字符串,请使用 ISO 格式:YYYY-MM-DD 或 YYYY-MM-DDTHH24:MI:SS。
我在 Azure SQL 数据库 (MSSQL) 中有一列将 JSON 信息存储为 VARCHAR。其中一个字段是 'date' ,它是一个字符串。现在我想要 select 行基于某些条件。该查询适用于 - event_type 和 component_type 等条件,但是,它不适用于日期条件。
我想使用 start_date 和 end_date 之类的输入进行查询,这些输入将是 string/varchar 和 select 行,这些行将大于 start_date 并且小于 end_date.
我正在使用的查询:
SELECT event_log FROM [dbo].[tblEventStore] where JSON_VALUE(event_log, '$.instance_id') LIKE 'XTO-TEST-45' AND
JSON_VALUE(event_log, '$.event_type') LIKE 'create' AND JSON_VALUE(event_log, '$.component_type') LIKE 'webapp'
AND CAST(JSON_VALUE(event_log, '$.date') as DATETIME2) BETWEEN '2021/09/02 12:00:00' and '2021/09/02 15:00:00'
JSON:
{
"requesting_user": "",
"event_type": "create",
"instance_id": "XTO-TEST-45",
"component_type": "webapp",
"date": "02/09/2021, 14:01:18",
"request": {
"webapp": "testwebappmanjug48",
"os": "linux",
"is_containerized_webapp": "false"
},
"provisioning_status": "request received"
}
错误:
Msg 241, Level 16, State 1, Line 10
Conversion failed when converting date and/or time from character string.
另一个查询:
SELECT CONVERT(datetime, JSON_VALUE(event_log, '$.date'), 110) FROM [dbo].[tblEventStore]
异常:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
您使用的格式不是 convert()
易于识别的格式。因此,您可以分别转换日期和时间组件:
select convert(datetime, left(JSON_VALUE(event_log, '$.date'), 10), 103) + convert(datetime, right(JSON_VALUE(event_log, '$.date'), 8))
一般来说,如果您想将 date/time 值存储为字符串,请使用 ISO 格式:YYYY-MM-DD 或 YYYY-MM-DDTHH24:MI:SS。