Informix SQL语法 - AS子句

时间:2017-06-15 11:01:06

标签: informix

我是Informix的新手,并且在语法方面遇到了一些问题。

以下是我对MySQL DB使用的查询:

select acceptable as "NUM",
       (callsoffered-outflowcalls-dequecalls-abncalls1-abncalls2-abncalls3-abncalls4) as "DEN"
from cms_hsplit 
WHERE 
row_date >= (current_date() - interval 9 day)

informix DB中的表名和列名相同。上述查询在Informix中失败。

“AS”部分的正确语法是什么?

返回当前日期减去9的语法是什么?

2 个答案:

答案 0 :(得分:2)

SELECT acceptable AS num,
       callsoffered-outflowcalls-dequecalls-abncalls1-abncalls2-abncalls3-abncalls4 AS den
FROM cms_hsplit
WHERE row_date >= TODAY - 9

答案 1 :(得分:0)

双引号与单引号

默认情况下,Informix将单引号和双引号视为“字符串”(SQL-86标准之前的遗留行为是标准)。在标准SQL中,单引号用于字符串,而双引号用于“分隔标识符”。从技术上讲,AS后面的内容不是字符串而是标识符。因此,Informix默认情况下不允许使用双引号表示法(除了SQL解析器之外,可能会以最小的混淆解除限制)。

至少有两种解决方法:

  1. 通常最好:不要在名称周围使用引号。
  2. 设置环境变量DELIMIDENT,以便将双引号“字符串”视为分隔标识符而不是字符串。它设置的值无关紧要(即使是一个空字符串就足够了),但我建议export DELIMIDENT=1export DELIMIDENT=true是明智的。请注意,export DELIMIDENT=0export DELIMIDENT=false与其他两个具有相同的含义。
  3. 设置环境变量意味着你必须要小心到处。如果您想在别名中使用空格或其他特殊字符,则必须使用DELIMIDENT和双引号。

    在表名等之前,Informix对于“用户名”的引用更为随意。

    日期算术

    您可以通过多种方式指定“当前减去九天”。两个主要的是:

    WHERE row_date = TODAY - 9
    WHERE row_date = CURRENT YEAR TO DAY - 9 UNITS DAY
    

    Informix DATE类型是自参考日期以来的天数(1899-12-31为第0天,因此第1天为1900-01-01)。因此,您可以在日期值之前或之前添加或减去日期值中的整数。

    Informix DATETIME类型系列更复杂,但非常具有可塑性。操纵往往是冗长的 - 证人CURRENT YEAR TO DAY9 UNITS DAY。另一方面,如果符合您的需求(或更合理地DATETIME MONTH TO MINUTE),您可以拥有DATETIME YEAR TO MINUTE值。