为什么 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.0
、10
和 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,正如我假设的那样。
根据 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.0
、10
和 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,正如我假设的那样。