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

对于格式为ISO w/时区(127)的字符串,SQL ISDATE返回false,sql,sql-server,datetimeoffset,Sql,Sql Server,Datetimeoffset,我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用SQL server convert format常量将其转换为相应的数据类型。但是,我在127“yyyy-mm-ddThh:mi:ss.mmmZ”中遇到了很多麻烦,因为对于这样格式化的字符串,ISDATE返回false SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false 为什么呢?是否有我不知道的sql server内置函数可以测试这是否是有

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

SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false
为什么呢?是否有我不知道的sql server内置函数可以测试这是否是有效的日期字符串?

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

您可以使用样式120(
yyyy-mm-dd hh:mi:ss(24小时)
ODBC-canonical)代替:


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

数据库管理系统,则
try\u convert
函数将返回
null
SELECT TRY_CONVERT(datetimeoffset, '2018-07-21 15:14:00.5206914 -06:00', 120);
-->
2018-07-21 15:14:00.5206914 -06:00