我是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的语法是什么?
答案 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解析器之外,可能会以最小的混淆解除限制)。
至少有两种解决方法:
DELIMIDENT
,以便将双引号“字符串”视为分隔标识符而不是字符串。它设置的值无关紧要(即使是一个空字符串就足够了),但我建议export DELIMIDENT=1
或export DELIMIDENT=true
是明智的。请注意,export DELIMIDENT=0
或export DELIMIDENT=false
与其他两个具有相同的含义。设置环境变量意味着你必须要小心到处。如果您想在别名中使用空格或其他特殊字符,则必须使用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 DAY
和9 UNITS DAY
。另一方面,如果符合您的需求(或更合理地DATETIME MONTH TO MINUTE
),您可以拥有DATETIME YEAR TO MINUTE
值。