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。