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

时间:2018-07-21 19:36:56

标签: 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

那是为什么?还有我不知道的sql server函数中的任何内置函数可以测试以查看这是否是有效的日期字符串?

1 个答案:

答案 0 :(得分:4)

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

您可以将try_convert与样式120(-06:00 ODBC规范)一起使用:

yyyy-mm-dd hh:mi:ss(24h)

如果传递的表达式不是有效的SELECT TRY_CONVERT(datetimeoffset, '2018-07-21 15:14:00.5206914 -06:00', 120); --> 2018-07-21 15:14:00.5206914 -06:00 ,则try_convert函数将返回null