sql-server - 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。
谁能给我一个提示,说明导致这种行为的那些系统之间可能有什么区别?
解决方案
在我看来,您LOGIN
在不同的服务器上使用不同的语言。TRY_PARSE
,默认情况下,使用LOGIN
if 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
推荐阅读
- python - Python solve_ivp [scipy.integrate]:如何设置你的集成过程的输出点数?
- javascript - 使用符号链接时 ES6 多次导入
- python - python3:Python无法理解文件中的代码
- python - XlsxlWriter 只会在电子表格中写入一行
- dictionary - Enum.into 和 Map.new 是否在内存中创建新对象?
- java - 运行时 java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference 在 Spring 从 4 升级到 5 之后
- python - 断言(len(内容)== 3)断言错误
- algorithm - 如果涉及一半(即1.5),二进制堆如何确定其父级?
- javascript - 如何使用 JavaScript 媒体查询更改元素的类?
- javascript - 具有条件的嵌套数组的减速器函数