【问题标题】:Denodo: How to aggregate varchar data types?Denodo:如何聚合 varchar 数据类型?
【发布时间】:2018-06-15 13:53:20
【问题描述】:

我正在从 Denodo 的视图表中的 anstime 列创建聚合,我正在使用 Cast 将其转换为浮点数,它仅适用于带有句点的数字(例如 123.123),但不适用于没有句点的数字(例如 123)。这是我的代码,仅适用于带有句点的数字:

SELECT row_date,
    case
        when sum(cast(anstime as float)) is null or sum(cast(anstime as float)) = 0
        then 0
        else sum(cast(anstime as float))
    end as xans
FROM table where anstime like '%.%'
group by row_date

有人可以帮我处理那些没有句号的吗?

【问题讨论】:

  • 去掉 where 子句怎么样?
  • 如果我这样做了,我会收到错误消息。当我第一次编写脚本时,我没有该期间的 where 子句,但我发现它只是用它转换这些数字。我什至尝试将那些没有句点的转换为整数,它给了我同样的错误。

标签: denodo


【解决方案1】:

我的猜测是你在 anstime 中有不是数字的值,因此为什么没有 where anstime like '%.%' 谓词会导致失败,正如其他 cmets 中提到的那样。

您可以尝试在此视图之前添加一个中间视图,以去除任何非数字值(当然保留小数点字符),这样您就不必使用where anstime like '%.%' 过滤器。

也许REGEXP 函数可能会有所帮助

【讨论】:

  • 您所说的完全有道理,我非常感谢您的帮助。但我现在无法测试它,因为我们的开发人员已经修复了数据类型问题。再次感谢!
  • 在源头固定数据始终是最佳选择,即使并非总是可行的选择。在您的情况下,您设法完成了这项工作,这很好。
【解决方案2】:

您的where anstime like '%.%' 子句将限制可能对 anstime 中有句点的地方的响应。如果您想允许所有值,请删除它。

【讨论】:

  • 我的原始查询没有该子句,它会导致错误。我发现它只是转换/转换带有句点的那些。
【解决方案3】:

我感谢那些回应我的担忧的人。最后,我们不得不联系我们的开发人员,将列的数据类型从 varchar 修复为 float,而不是解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 2015-07-21
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多