对于格式化为 ISO w/时区 (127) 的字符串,SQL ISDATE 返回 false

Ada*_*mes 5 sql sql-server datetimeoffset

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

SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false
Run Code Online (Sandbox Code Playgroud)

这是为什么?是否有任何我不知道的内置 SQL Server 函数可以测试这是否是有效的日期字符串?

And*_*mar 5

isdate函数接受某些日期(取决于日期格式和语言),但从不接受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
Run Code Online (Sandbox Code Playgroud)

如果传递的表达式不是有效的,该try_convert函数将返回。nulldatetimeoffset