select * from
  (select grocery_item,
  LPAD(PRICE_IN_2000,5,' ') AS PRICE_IN_2000,
LPAD(ESTIMATED_PRICE_IN_2025,8,' ') AS ESTIMATED_PRICE_IN_2025,

  ROUND((ESTIMATED_PRICE_IN_2025/PRICE_IN_2000-1)*100,2) ||'%' "MY OUTPUT"
  from grocery_prices) M  
  where ((ESTIMATED_PRICE_IN_2025/PRICE_IN_2000-1)*100)=  
  (select MAX((ESTIMATED_PRICE_IN_2025/PRICE_IN_2000-1)*100) from grocery_prices);1 LPAD(PRICE_IN_2000,5,' ') AS PRICE_IN_2000,为什么这条命令会显示.88 而不是0.88呢?左移后0没了....
2 我还想在数字前加$符号,所以我改成 LPAD(to_char(PRICE_IN_2000,'$99.99'),5,' ') AS PRICE_IN_2000,为什么运行就提示"invalid number"了呢

解决方案 »

  1.   

    1、从第二个错误可以看出 PRICE_IN_2000 这个字段应该是 char型的,否则不会报错 invalid number
    说明你这个char型字段中存储含有字符2、既然 这个字段是char型的显示 .88 说明数据保存就是这样的。
      

  2.   

    加符号也简单  怎么不考虑前面加  不用转呢
    select '$'||LPAD('123',5,' ') c1
    from dual
      

  3.   


    1 这就是oracle的显示格式,如果需要0.88,需要指定显示格式,
    2 应该是没有问题的
    sys@ORCL1> select 0.88 from dual;      0.88
    ----------
           .88sys@ORCL1> select to_char(0.88, '990.999') from dual;TO_CHAR(
    --------
       0.880sys@ORCL1> select lpad(to_char(0.88, '90.999'),10,' ') from dual;LPAD(TO_CH
    ----------
         0.880