Денодо: Как агрегировать типы данных varchar?

Я создаю агрегат из столбца anstime в таблице представлений в Denodo и использую приведение для преобразования его в число с плавающей точкой, и оно работает только для тех чисел с периодом (пример 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

Может кто-нибудь, пожалуйста, помогите мне, как справиться с теми без периода?

3 ответа

Решение

Я думаю, у вас есть значения в anstime, которые не являются числовыми, поэтому почему бы не иметь where anstime like '%.%' Предикат вызывает сбой, как уже упоминалось в других комментариях.

Вы можете попробовать добавить промежуточное представление перед этим, которое удаляет любые нечисловые значения (оставляя, конечно, символ десятичной точки), и тогда это может позволить вам не использовать where anstime like '%.%' фильтр.

Возможно, функция REGEXP, которая могла бы помочь там

Ваш where anstime like '%.%' пункт собирается ограничить возможные ответы местами, где у anstime есть период. Удалите это, если вы хотите разрешить все значения.

Я ценю тех, кто откликнулся на мою заботу. В конце концов нам пришлось обратиться к нашим разработчикам, чтобы исправить тип данных столбца от varchar до float, а не делать обходной путь.

Другие вопросы по тегам