为什么 SELECT TRY_TO_NUMBER('E') return 0?

Why does SELECT TRY_TO_NUMBER('E') return 0?

根据 Snowflake documentation,TRY_TO_NUMBER 在传递非数字值时应该 return NULL。但是,当传递字符串 'E' 时,函数 returns a 0.

SELECT TRY_TO_NUMBER('E');

Result showing 0 instead of expected NULL

因为前后隐含一个零:

SELECT TRY_TO_NUMBER('E'),
    TRY_TO_NUMBER('1E2'),
    TRY_TO_NUMBER('0E'),
    TRY_TO_NUMBER('0E0');

给出:

TRY_TO_NUMBER('E') TRY_TO_NUMBER('1E2') TRY_TO_NUMBER('0E') TRY_TO_NUMBER('0E0')
0 100 0 0

可能很像 010.010 和 10.0` 都解析为相同的东西,不需要零。

但这似乎是解析器的故障。

这可以通过传递可选的格式参数 'TM9' 来解决,该参数指定您不需要科学记数法。

SELECT TRY_TO_NUMBER('E','TM9'),
    TRY_TO_NUMBER('1E2','TM9'),
    TRY_TO_NUMBER('0E','TM9'),
    TRY_TO_NUMBER('0E0','TM9')

现在所有这些都成功了 return NULL,正如我假设的那样。