Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle order by upper(colname)不能为非字符串列提供正确的结果_Sql_Oracle - Fatal编程技术网

Sql Oracle order by upper(colname)不能为非字符串列提供正确的结果

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不是字符串,则必须在执行函数之前将其隐式转换为字符串。但是,由

当oracle db中存在非字符串(即:varchar,date)列(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”
字符串“9”按字母顺序排在字符串“10”之后,这大概就是您看到的问题所在


但是如果
col1
不是字符串,为什么还要麻烦将其转换为大写以便排序呢?

col1的数据类型是什么?您还应添加一个“不正确”的示例。从这里我们看不到您的监视器在非字符串列中使用“按上限排序”(col)可以获得什么结果?@jachguate。这只是为了我的理解。没有商业目的谢谢你如此准确地预测了问题。