我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用 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 函数可以测试这是否是有效的日期字符串?
最佳答案
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
函数将返回null
。
关于对于格式化为 ISO w/时区 (127) 的字符串,SQL ISDATE 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459479/