首页 > 解决方案 > TRY_PARSE 表示服务器之间的科学记数法不同

问题描述

我在不同的机器上有两个 SQL Server 11.0.6020.0(英语)实例

我注意到其中一个有以下行为:

SELECT TRY_PARSE('1.0000000000000000E+00' as float) -- yields NULL
SELECT TRY_CONVERT(float, '1.0000000000000000E+00') -- yields 1

然而,另一方面,两个查询都产生 1。

谁能给我一个提示,说明导致这种行为的那些系统之间可能有什么区别?

标签: sql-server

解决方案


在我看来,您LOGIN在不同的服务器上使用不同的语言。TRY_PARSE,默认情况下,使用LOGINif one is not specified 的文化。如果您指定一种文化,无论LOGIN语言设置如何,您都将获得一致的结果。

例如,如果您使用以下内容,法语返回NULL

SELECT TRY_PARSE('1.0000000000000000E+00' as float USING 'en-GB'),
       TRY_PARSE('1.0000000000000000E+00' as float USING 'fr-FR');

如果你使用这两个语句,同样注意到法语返回时NULL没有指定文化:

SET LANGUAGE British; --because I live in England, so I don't speak English?
SELECT TRY_PARSE('1.0000000000000000E+00' as float), --Returns 1;
       TRY_PARSE('1.0000000000000000E+00' as float USING 'en-GB') --Returns 1
GO
SET LANGUAGE French;
SELECT TRY_PARSE('1.0000000000000000E+00' as float), --Returns NULL;
       TRY_PARSE('1.0000000000000000E+00' as float USING 'en-GB') --Returns 1
GO

推荐阅读