数值无法识别
Posted
技术标签:
【中文标题】数值无法识别【英文标题】:Numeric value is not recognized 【发布时间】:2021-11-30 21:08:40 【问题描述】:尝试执行这样的查询并获得无法识别的数值错误。使用的列的数据类型是
Col1 - VARCHAR,
Col2 - VARCHAR,
Col3 - TIMESTAMP_NTZ(9)
这是我的查询
Select count( distinct (
case when Col1 > 100
then concat(col2,cast(col3 as string))
else 0
end))
【问题讨论】:
【参考方案1】:您的 CASE 返回的 string
和 number
不是同一类型,因此如果您将 0
转换为字符串 '0'
应该会更好。
附带说明,对于所有 null 而不是 0,那么它不会计数,并且不会有类型问题。
【讨论】:
【参考方案2】:您的Col1
是VARCHAR
,但您正在将它与一个数字进行比较。虽然雪花确实有一个乐观的自动类型转换(即它将Col1
中的字符串转换为数字),但它可能会因一个或多个值而失败。而且由于您没有发现这些错误,您的查询将作为一个整体失败。
Select count( distinct (
case when try_to_number(Col1) > 100
then concat(col2,cast(col3 as string))
else '0'
end))
try_no_number
将尝试将Col1
的值转换为数字并在失败时返回null
。但它不会抛出错误。
还要考虑西蒙所说的话。即你的CASE
的结果有不同的类型。我不知道DISTINCT
是如何处理这个问题的,但我可以想象,它从它看到的第一个值中推断出类型,如果那是一个数字,它可能会尝试将所有其他元素也转换为数字,这可能 - 取决于值 - 导致相同的错误。
【讨论】:
以上是关于数值无法识别的主要内容,如果未能解决你的问题,请参考以下文章
JasperReports - 导出到 Excel 时无法识别数值
Snowflake Substring Concat 问题:无法识别数值“”
我的 CSV 文件带有双引号括起来的字段 - 无法识别数值“12131”