Функция AVG Ошибка времени выполнения DB2 SQL - PullRequest
0 голосов
/ 10 мая 2018

Я запускаю этот sql statemnt в DB2

SELECT (CASE WHEN AVG(TVAPC) > 0 THEN 'Y' ELSE 'N' END) 
FROM TABLE1 

Пока это работает. Столбец TVAPC - char (5). Но во время выполнения мы получили эту ошибку. Ошибка SQL + 364 ошибки. И мы не можем поймать эту ошибку знакомого случая. Иногда мы получаем иногда мы не можем для того же случая.

Кажется, ошибка во время выполнения, но как я могу предотвратить эту ошибку?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

У меня пока недостаточно репутации, чтобы комментировать ваше сообщение, поэтому я собираюсь опубликовать «ответ» с риском того, что гонорар стека переполнится, если он его опровергнет и отчитает за это. Проверьте тип данных столбца. Когда я запускаю его, он работает нормально, пока тип данных столбцов является числовым типом. Если это ваш случай (тип столбца не числовой) приведите / преобразуйте его в Int.

--In case it isn't a numeric type...
SELECT (CASE WHEN AVG(CAST(column as int))>0 THEN 'Y' ELSE 'N' END) 
FROM TEMP1234 
0 голосов
/ 10 мая 2018

Почему вы берете среднее значение строки ?Вам следует исправить формат данных.

В любом случае вы можете проверить, имеет ли значение число.Вот один из способов (при условии, что значение является числом):

SELECT (CASE WHEN AVG(CASE WHEN LENGTH(TRANSLATE(test_str, '*', ' 0123456789')) = 0 THEN TVAPC END) > 0
             THEN 'Y' ELSE 'N'
        END) 
FROM TABLE1 
...