Sql server 尝试解析不同服务器之间的科学符号

Sql server 尝试解析不同服务器之间的科学符号,sql-server,Sql Server,我在不同的机器上有两个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 11.0.6020.0(英语)实例

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

SELECT TRY_PARSE('1.0000000000000000E+00' as float) -- yields NULL
SELECT TRY_CONVERT(float, '1.0000000000000000E+00') -- yields 1
然而,在另一个查询中,两个查询都产生1


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

听起来好像您在不同的服务器上使用不同的语言登录
TRY_PARSE
,默认情况下,如果未指定登录名的区域性,则使用该登录名的区域性。如果指定区域性,则无论
登录
语言设置如何,都将获得一致的结果

例如,如果使用以下选项,法语返回
NULL

选择TRY\u PARSE('1.000000000000 E+00'作为使用'en GB'的浮点值),
尝试使用“fr-fr”将('1.000000000000 E+00'作为浮点值)进行解析;
如果使用这两条语句,请注意,French返回
NULL
,但未指定区域性:

SET语言为英式--因为我住在英国,所以我不会说英语?
选择TRY_PARSE('1.0000000000000000 e+00'作为浮点),--返回1;
尝试使用'en GB'将('1.0000000000000000 E+00'作为浮点值进行解析)--返回1
去
法语;
选择TRY_PARSE('1.0000000000000000 e+00'作为浮点值),--返回NULL;
尝试使用'en GB'将('1.0000000000000000 E+00'作为浮点值进行解析)--返回1
去

您确定两个登录名具有相同的登录名吗?如果添加区域性,它是否提供一致的结果?对于初学者,请尝试
选择try\u PARSE('1.0000000000000000 e+00'作为使用'en-US'的浮点值)
TRY\u PARSE
遵从.NET进行解析,而
TRY\u CONVERT
则不遵从.NET进行解析,因此这至少是发生差异的一种主要方式。针对后者,请举例说明:
选择TRY\u PARSE('1D+0'作为浮点)
给出
NULL
选择TRY\u CONVERT(浮点,'1D+0')
给出
1
,因为后者允许引擎支持的非标准FORTRAN风格的指数,但.NET Framework不知道。