SQL Server中Parse和Convert之间的区别

时间:2016-04-15 20:56:31

标签: sql tsql sql-server-2012

我有这样的查询

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作为结果。

任何人都可以告诉我PARSECONVERT有何不同以及为什么我能够使用PARSE而不是CONVERT运行查询?感谢

2 个答案:

答案 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()

转换为日期时间格式