当我按上/下使用不同顺序时出现 SQL 错误

use*_*538 1 sql postgresql

这在 postgres 8.4 中不起作用:

SELECT DISTINCT col1 FROM mytable
  ORDER BY UPPER(col1);
Run Code Online (Sandbox Code Playgroud)

但这有效:

SELECT DISTINCT col1 FROM mytable
  ORDER BY col1;
Run Code Online (Sandbox Code Playgroud)

我知道数据库可能会有点困惑,是先应用 DISTINCT 再应用 UPPER 还是先转换为 UPPER 然后应用 DISTINCT。根据其应用顺序,人们可能会得到不同的结果。不确定 SQL 标准是否有这方面的规定。

任何帮助将不胜感激。

Bri*_*ver 5

许多 SQL 引擎只允许您对选定的列进行排序。因此修复将 UPPER(col1) 添加到选择中。

SELECT DISTINCT UPPER(col1), col1 FROM mytable ORDER BY UPPER(col1)
Run Code Online (Sandbox Code Playgroud)