db2: как удалить десятичную дробь из числового столбца?

#sql #db2 #aggregate-functions #where-clause

#sql #db2 #агрегатные функции #where-предложение

Вопрос:

Очень простой запрос, который работает

 select avg(price) from cars where type = 'electric';
  

результат

 1                                
---------------------------------
                45000,00000000000
  

Я хочу удалить,00000000000, чтобы получить

    1                                
    ---------------------------------
                    45000
  

Я пробовал приводить и округлять, но безуспешно.
Я на Db2

Этот приятный ltrim отлично работает для всех типов автомобилей

 select replace(ltrim(replace(price,'0',' ')),' ','0') from cars;
  

но использование with avg возвращает строку с 00000

 select replace(ltrim(replace(avg(price),'0',' ')),' ','0') from cars where type = 'electric';
  

результат..

 45000.00000000000
  

🙁
Изменяется только значение , .

Ответ №1:

cast редактирование этого значения должно просто работать:

 select cast(avg(price) as int) as avg_int
from cars 
where type = 'electric';
  

Ответ №2:

Приведение к целому числу, как предложено в другом ответе, будет работать.

Однако имейте в виду, что

  1. вы будете усекать любые десятичные значения.
  2. вы конвертируете из одного типа в другой.

Вы можете разрешить # 1 путем приведения после ROUND()

 select int(round(avg(price),0)) as avg_int
from cars 
where type = 'electric'
  

Вы можете разрешить # 2, используя DECIMAL() или ZONED() с нулем для масштабирования в зависимости от исходного типа столбца.

 select dec(avg(price),10,0) as avg_dec
from cars 
where type = 'electric'
  

И, конечно ROUND() , можно использовать DECIMAL() ZONED() также с or …