当oracle db中存在非字符串(即:varchar,date)列(col1)时,如果我这样做:
select * from table order by col1 asc
Run Code Online (Sandbox Code Playgroud)
它订单正常.(即,对于日期,它从最旧到最新订购,对于数字,从最低到最高)但是如果我这样做,select * from table order by upper(col1) asc
则排序不正确.
这种行为的原因是什么?
UPPER接受一个字符串并返回一个字符串.如果col1不是字符串,则必须在执行函数之前将其隐式强制转换为字符串.但是,由于UPPER函数的输出是字符串,因此排序必须使用字符串排序语义,而不是排序语义col1.col1例如,如果是数字
字符串'9'在字符串'10'之后按字母顺序排列,这可能是您看到的问题.
但如果col1不是一个字符串,为什么要将它转换为大写以便排序呢?