我有这样的查询
SELECT ISDATE('18 Mar 2016 18:57:35 GMT');
当然它返回0,因为字符串不是有效的日期格式,并且在我运行时再次出于同样的原因
SELECT CONVERT(DATETIME, '18 Mar 2016 18:57:35 GMT')
我收到错误:
从字符串转换日期和/或时间时转换失败。
但我不明白为什么我可以用PARSE
函数做同样的事情。
SELECT PARSE('18 Mar 2016 18:57:35 GMT' AS DATETIME )
我得到2016-03-18 14:57:35.000
作为结果。
任何人都可以告诉我PARSE
和CONVERT
有何不同以及为什么我能够使用PARSE
而不是CONVERT
运行查询?感谢
答案 0 :(得分:6)
PARSE函数是SQL Server 2012中的新功能并使用.NET CLR - 它不是本机T-SQL,而CONVERT函数是本机T-SQL。使用PARSE函数时可能会有一些性能开销,并且还取决于数据库服务器上是否存在.NET CLR。
来自http://sqlhints.com/tag/convert-vs-parse/的引用:
PARSE函数将成功转换字符串'Saturday,08 '2013年6月'到目前为止,但CONVERT函数无法转换 相同的价值。这是PARSE函数尝试最好转换 输入字符串值到请求的类型,但CONVERT函数 要求输入字符串是精确格式,不允许变化。
查看文章了解更多信息: http://sqlhints.com/tag/convert-vs-parse/
答案 1 :(得分:0)
DECLARE @DATE VARCHAR(30)='18 Mar 2016 18:57:35 GMT'
SELECT CONVERT(DATETIME,REPLACE(@DATE,'GMT',''))
PRINT @DATE
因为,此处GMT字符串无法使用CONVERT()