数值无法识别

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 返回的 stringnumber 不是同一类型,因此如果您将 0 转换为字符串 '0' 应该会更好。

附带说明,对于所有 null 而不是 0,那么它不会计数,并且不会有类型问题。

【讨论】:

【参考方案2】:

您的Col1VARCHAR,但您正在将它与一个数字进行比较。虽然雪花确实有一个乐观的自动类型转换(即它将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”

当我尝试使用 laravel 发布表单时,控制台显示“不正确的整数值”。无法识别路由参数

如何利用Halcon进行二维码QR码的识别