【发布时间】:2022-10-23 13:14:33
【问题描述】:
我试图得到一些我认为应该相对简单的东西(它适用于 Oracle 和 MySQL)。以下代码的 PostgreSQL 小提琴可用here - 只需更改服务器以检查其他服务器。
非常简单的测试用例:
CREATE TABLE x
(
y CHAR(1)
);
填充:
INSERT INTO x VALUES ('x');
和
INSERT INTO x VALUES('y');
然后(工作 - 正如人们所期望的那样):
SELECT
y AS the_char
FROM
x
ORDER BY the_char;
结果:
the_char
x
y
但是,如果我尝试以下操作:
SELECT
y AS the_char
FROM
x
ORDER BY ASCII(the_char);
我收到一个错误:
ERROR: column "the_char" does not exist
LINE 5: ORDER BY ASCII(the_char);
如前所述,这适用于 Oracle 和 MySQL,但不适用于 PostgreSQL、Firebird 和 SQL Server。
谁能解释为什么?导致ORDER BY 失败的列的简单功能是什么?这似乎与手册 here 冲突,其中说:
排序表达式可以是任何在 查询的选择列表。一个例子是:
SELECT a, b FROM table1 ORDER BY a + b, c;
【问题讨论】:
标签: sql postgresql sql-order-by sql-function column-alias