Sql Oracle order by upper(colname)不能为非字符串列提供正确的结果
当oracle db中存在非字符串(即:varchar,date)列(col1)时,如果存在:Sql Oracle order by upper(colname)不能为非字符串列提供正确的结果,sql,oracle,Sql,Oracle,当oracle db中存在非字符串(即:varchar,date)列(col1)时,如果存在: select * from table order by col1 asc 它点的很好。(即,对于日期,它从最早到最晚排序,对于数字,从最低到最高排序) 但如果我这样做,select*from table order by upper(col1)asc 顺序不正确 此行为的原因是什么?UPPER获取一个字符串并返回一个字符串。如果col1不是字符串,则必须在执行函数之前将其隐式转换为字符串。但是,由
select * from table order by col1 asc
它点的很好。(即,对于日期,它从最早到最晚排序,对于数字,从最低到最高排序)
但如果我这样做,select*from table order by upper(col1)asc
顺序不正确
此行为的原因是什么?UPPER获取一个字符串并返回一个字符串。如果
col1
不是字符串,则必须在执行函数之前将其隐式转换为字符串。但是,由于上限函数的输出是字符串,因此排序必须使用字符串排序语义,而不是col1
的排序语义。例如,如果col1
是数字
- UPPER(9)返回字符串“9”
- UPPER(10)返回字符串“10”
但是如果
col1
不是字符串,为什么还要麻烦将其转换为大写以便排序呢?col1的数据类型是什么?您还应添加一个“不正确”的示例。从这里我们看不到您的监视器在非字符串列中使用“按上限排序”(col)可以获得什么结果?@jachguate。这只是为了我的理解。没有商业目的谢谢你如此准确地预测了问题。