使用内置函数的名称作为列名

下面的两个例子列出了用 SELECT 语句把内置函数作为列名的一个变通方法。这种变通方法应用于聚集函数(AVG 、COUNT 、MAX 、MIN 、SUM)和函数表达式(代数、指数和对数、time 、HEX 、length 、DBINFO 、trigonometric 和 TRIM 函数)。

使用 avg 作为列名导致下面这个例子的失败因为数据库服务器把 avg 解释为聚集函数而不是列名:
SELECT avg FROM mytab; -- fails
如果设置了 DELIMIDENT 环境变量,就可以使用 avg 作为列名,如下面的例子所示:
SELECT "avg" from mytab; -- successful
下面的例子中的变通方法通过在列名中包含表名,去除多义性:
SELECT mytab.avg FROM mytab; 
如果您使用 TODAY 、CURRENT 、SYSDATE 或 USER 关键字作为列名,就可能产生多义性,如下面的例子所示:
CREATE TABLE mytab (user char(10),
        CURRENT DATETIME HOUR TO SECOND,TODAY DATE);
        
        INSERT INTO mytab VALUES('josh','11:30:30','1/22/2008');
        
        SELECT user,current,today FROM mytab;

数据库服务把 SELECT 语句中的 usercurrenttoday 解释成内置函数 USER 、CURRENT 和 TODAY。于是 SELECT 语句返回了当前用户名、当前时间和当前日期而不是 josh, 11:30:30,1/22/2008。SYSDATE 关键字在 GBase 8s 数据库中具有类似的效果。

如果想选择表中实际的列,必须把 SELECT 语句写成下面几句之一:
SELECT mytab.user,  mytab.current,  mytab.today FROM mytab;
        
        EXEC SQL select * from mytab;