SQL ISDATE returns false 对于格式为 ISO w/timezone 的字符串 (127)

SQL ISDATE returns false for string formatted as ISO w/timezone (127)

我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用 SQL 服务器转换格式常量将其转换为相应的数据类型。但是,对于以这种方式格式化的字符串,在 ISDATE returns false 中,我遇到了 127 "yyyy-mm-ddThh:mi:ss.mmmZ" 的很多麻烦。

SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false

这是为什么? sql 服务器功能中是否有任何我不知道的构建可以测试这是否是有效的日期字符串?

isdate function 接受某些日期(取决于日期格式和语言),但从不接受 datetimeoffset。偏移量是示例末尾的 -06:00 部分。

您可以将 try_convert 与样式 120(yyyy-mm-dd hh:mi:ss(24h) ODBC 规范)一起使用:

SELECT TRY_CONVERT(datetimeoffset, '2018-07-21 15:14:00.5206914 -06:00', 120);
-->
2018-07-21 15:14:00.5206914 -06:00

如果传递的表达式不是有效的 datetimeoffset.

try_convert 函数将 return null