我想知道是否可以使用SQL函数来命名查询列。举个简单的例子:
SELECT id AS SUBSTR('xAlias', 2) FROM foo
理论上应该返回
Alias
------
...
results
...
如果可以,可以使用哪些数据库?如果没有,那么为什么?
答案 0 :(得分:3)
AFAIK,在任何主要的DBMS产品中都没有SQL方法来支持这一点。
要在Oracle中命名PIVOT列,for name in.. as
似乎是最佳选择
除此之外,还有动态SQL。
要命名查询列,ANSI标准只是在“AS”前面的列(派生或基础)之后添加新名称:
SELECT id, field1, field2 * qty FROM foo
以下所有列重命名:
SELECT id AS RenamedID, field1 AS Col1, field2 * qty AS ExtendedTotal FROM foo
该标准适用于几乎所有主要数据库系统 有一些供应商特定的变体,例如SQL Server允许等号
SELECT RenamedID=id FROM foo
大多数DBMS允许省略“AS”关键字
SELECT id RenamedID FROM foo
答案 1 :(得分:3)
这是一个奇怪的要求,我认为没有DBMS会支持这一点。无论如何,我做了测试,结果如下:
这在SQL Server 2008,MySQL 5和PostgreSQL 9(它们共享相同的sintax)中不起作用:
SELECT id AS left('xAlias', 2) FROM table
在Oracle 11g和SQLite 3中,这也失败了:
SELECT id AS substr('xAlias', 1, 2) FROM table
我打赌你不会发现任何支持它:P
答案 2 :(得分:1)
您可以使用动态SQL并以这种方式生成查询,但我认为没有字符串构建可以做到这一点。我想所有主要的DBMS都支持动态SQL。