Sql 如何使用函数结果作为别名?

Sql 如何使用函数结果作为别名?,sql,Sql,我想知道是否可以使用SQL函数来命名查询的列。举个简单的例子: SELECT id AS SUBSTR('xAlias', 2) FROM foo 理论上应该回归 Alias ------ ... results ... 如果可以的话,该数据库可用于哪些数据库?如果没有,那为什么呢?AFAIK,在任何主要的DBMS产品中都没有SQL方法来支持这一点 在Oracle中命名PIVOT列似乎是最好的选择。 除此之外,动态SQL已经结束了 原始答案如下 要命名查询的列,ANSI标准只需在列(派生列

我想知道是否可以使用SQL函数来命名查询的列。举个简单的例子:

SELECT id AS SUBSTR('xAlias', 2) FROM foo
理论上应该回归

Alias
------
...
results
...

如果可以的话,该数据库可用于哪些数据库?如果没有,那为什么呢?

AFAIK,在任何主要的DBMS产品中都没有SQL方法来支持这一点

在Oracle中命名PIVOT列似乎是最好的选择。
除此之外,动态SQL已经结束了


原始答案如下 要命名查询的列,ANSI标准只需在列(派生列或基列)前面加上新名称“AS”:

所有列重命名如下:

SELECT id AS RenamedID, field1 AS Col1, field2 * qty AS ExtendedTotal FROM foo
该标准适用于几乎所有主要的数据库系统。
有一些特定于供应商的变体,例如SQL Server允许等号

SELECT RenamedID=id FROM foo
大多数数据库管理系统都允许省略“AS”关键字


这是一个奇怪的要求,我认为没有数据库管理系统会支持它。我做了测试,结果如下:

这在SQL Server 2008、MySQL 5和PostgreSQL 9中不起作用(它们共享相同的sintax):

在Oracle 11g和SQLite 3中,这也失败了:

SELECT id AS substr('xAlias', 1, 2) FROM table

我打赌你找不到任何支持这一点的方法:p

你可以使用动态SQL并以那种方式生成查询,但我认为没有一种方法可以在不构建字符串的情况下实现这一点。我想所有主要的数据库管理系统都会支持动态SQL。

我想你不明白我的问题。我知道可以将列重命名为预定字符串,如“foo”、“field1”或“qty”。但是,我可以调用某种函数,比如SUBSTR、LEFT,甚至日期,而不是使用预先确定的字符串吗?那么答案是AFAIK没有数据库支持这一点。您希望解决什么问题?我目前使用的供应商不支持
PIVOT
语句(Oracle的旧版本),因此我必须从
DECODE
功能中进行选择。目前,该列的名称很难看,我想将该列重命名为该列所代表的适当日期。但是我无法让Oracle将我的列重命名为
TRUNC(SYSDATE-x)
。您可能需要查看动态SQL(PL/SQL),谢谢。PIVOT是最好的选择,但动态SQL应该可以工作。
SELECT id RenamedID FROM foo
SELECT id AS left('xAlias', 2) FROM table
SELECT id AS substr('xAlias', 1, 2) FROM table