无法在AS400中运行SQL查询,遇到无效令牌错误

时间:2013-05-16 12:46:10

标签: sql db2 ibm-midrange

在AS400中,我如何在字段上执行算术运算(如+, - )。

  • 对于查询Select id, sum(field1+field2) as Total from table group by id,在德语中获取以下错误消息“[IBM] [系统 我访问ODBC-Treiber] [DB2füri5/ OS] SQL0104 - Token&amp; ungültig。 GültigeToken:+ - AS <IDENTIFIER>。“英语翻译是一种东西 例如“[IBM] [System i Access ODBC Driver] [DB2 for i5 / OS] SQL0104 - 令牌<END Instruction>无效。有效令牌:CL AS IN LOG OUT DATA <identifier>“。
  • 对于查询Select count(*) from (select distinct field1 from table where field2="abc",收到以下错误消息“[IBM] [System i Access ODBC-Treiber] [DB2füri5/ OS] SQL0104 - Token <ENDE DER ANWEISUNG>ungültig.GültigeToken:AS CL IN LOG OUT DATA <IDENTIFIER>。“
  • 对于带有子查询的查询,得到以下错误消息 “[IBM] [System i Access ODBC-Treiber] [DB2füri5/ OS] SQL0104 - Token&amp;ungültig.GültigeToken:< > = <> <= !< !> != >= ¬< ¬> ¬= IN NOT。“

有人可以告诉我我的SQL查询有什么问题。

2 个答案:

答案 0 :(得分:6)

TABLE是保留字。 SQL Reference: Reserved schema names and reserved words

  • 单引号转义字符串文字
  • 双引号转义保留字(类似于TSQL中的括号)

SQL Reference: Identifiers

可以将查询重写为:

SELECT ID, SUM(FIELD1 + FIELD2) AS TOTAL FROM "TABLE" GROUP BY ID
SELECT COUNT(*) FROM (SELECT DISTINCT FIELD1 FROM "TABLE" WHERE FIELD2 = 'ABC')

<强>更新

对于i,DB / 2不支持数字到字符转换的方法或LIKE查询中使用的字符比较类型。

可以将查询重写为:

SELECT eds, SUM(INT(sds)) AS totalh 
FROM tbl1 
WHERE eds BETWEEN 20130500 AND 20130599 
AND siteds IN (
    SELECT DISTINCT site 
    FROM tbl2 
    WHERE H_04 IN ('1234') AND PERIOD = 201305
) 
GROUP BY eds
ORDER BY eds

您可能需要使用DEC代替INT,具体取决于字段sds的定义。

SQL参考: - INT - DEC - BETWEEN

答案 1 :(得分:1)

桌子的名字真的是'桌子'吗?

看起来很奇怪,如果我使用您指定的SQL语句,我会得到相同的错误...但如果我将'table'更改为'table1',它只会抱怨它无法找到'table1 ”。