尝试在oracle 11g中使用sql查询从表中显示前3个金额。列是varchar类型

时间:2019-05-20 10:18:23

标签: oracle oracle11g

我试图根据存储在varchar数据类型的列FTE_TMUSD中的一定数量来列出前3条记录

下面是我尝试过的查询

 SELECT  *FROM 
    (
    SELECT * FROM FSE_TM_ENTRY 
    ORDER BY FTE_TMUSD desc
    )
WHERE rownum <= 3
ORDER BY FTE_TMUSD DESC ;

我得到了

972,9680,963->不会在desc中显示的FTE_TMUSD值

我期望一个o / p将显示值的前3个记录

1 个答案:

答案 0 :(得分:0)

应该有效;内联视图按FTE_TMUSD降序排列,您正在从中选择值。

看起来可疑的是您指定为结果的值。看来FTE_TMUSD的数据类型是VARCHAR2(啊,是的-是的,您是这么说的)。这意味着值是按字符串而不是数字排序的-似乎您期望数字。因此,将TO_NUMBER应用于该列。请注意,如果列中除了数字以外的任何内容(例如,如果值972C),它将失败。

此外,查询的替代方法可能是使用分析功能,例如row_number

with temp as
  (select f.*,
          row_number() over (order by to_number(f.fte_tmusd) desc) rn
   from fse_tm_entry f
  )
select * 
from temp
where rn <= 3;