我是一个全新的Informix新手,在语法方面有一些问题。
下面是我对MySQL数据库使用的查询:
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的语法是什么?
发布于 2017-06-15 19:50:20
SELECT acceptable AS num,
callsoffered-outflowcalls-dequecalls-abncalls1-abncalls2-abncalls3-abncalls4 AS den
FROM cms_hsplit
WHERE row_date >= TODAY - 9发布于 2017-06-16 02:51:16
双引号与单引号
默认情况下,Informix将单引号和双引号视为“字符串”(在SQL-86标准成为标准之前的遗留行为)。在标准SQL中,单引号用于字符串,而双引号将“分隔标识符”括起来。从技术上讲,AS后面的不是一个字符串,而是一个标识符。因此,Informix在缺省情况下不允许使用双引号表示法(除了SQL解析器之外,这一限制可能会被取消,而不会造成最小的混乱)。
有(至少)两种方法可以解决这个问题:
DELIMIDENT,以便双引号“string”被视为分隔标识符,而不是字符串。它设置的值并不重要(即使是一个空字符串也足够了),但我建议使用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 DAYInformix DATE类型是自引用日期(1899-12-31是第0天,因此第1天是1900-01-01)以来的天数的计数。因此,您可以从日期值中添加或减去整数,以获得日期值之后或之前的天数。
Informix DATETIME类型家族更为复杂,但具有很强的可扩展性。操作往往是冗长的-见证CURRENT YEAR TO DAY和9 UNITS DAY。另一方面,如果满足您的需要(或者更合理地说,是DATETIME YEAR TO MINUTE),您可以有一个DATETIME MONTH TO MINUTE值。
https://stackoverflow.com/questions/44565814
复制相似问题