首页 > 解决方案 > 尝试在 oracle 11g..column 中使用 sql 查询显示表中的前 3 个数量是 varchar 类型

问题描述

我试图根据存储在FTE_TMUSDvarchar 数据类型的列中的一些数量从表中列出前 3 条记录

以下是我尝试过的查询

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

o/pi 得到

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

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

标签: oracleoracle11g

解决方案


应该行得通;内联视图按FTE_TMUSD降序排列,您从中选择值。

看起来可疑的是您指定为结果的值。看起来FTE_TMUSD's 的数据类型是VARCHAR2(啊,是的 - 是的,你这么说)。这意味着值被排序为字符串,而不是数字 - 而且您似乎期望numbers。因此,适用TO_NUMBER于该列。972C请注意,如果 column 包含除数字以外的任何内容(例如,如果存在 value ),它将失败。

此外,您的查询的替代方法可能是使用分析函数,例如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; 

推荐阅读