0

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

  • 对于查询Select id, sum(field1+field2) as Total from table group by id,在德语中收到以下错误消息“[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token & ungültig.Gültige Token: + - AS <IDENTIFIER>。” 英文翻译类似于“[IBM] [System i Access ODBC Driver] [DB2 for i5/OS] SQL0104 - Token <END Instruction>invalid. Valid tokens: CL AS IN LOG OUT DATA <identifier>。”
  • 对于查询Select count(*) from (select distinct field1 from table where field2="abc",收到以下错误消息“[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token <ENDE DER ANWEISUNG>ungültig.Gültige Token: AS CL IN LOG OUT DATA <IDENTIFIER>。”
  • 对于带有子查询的查询,得到以下错误消息“[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token & ungültig。Gültige Token: < >= <> <= !< !> != >= ¬< ¬> ¬=IN NOT。”

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

4

2 回答 2

6

TABLE是保留字。 SQL 参考:保留模式名称和保留字

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

SQL 参考:标识符

查询可以重写为:

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

更新

DB/2 for i 不支持您的数字到字符转换方法或 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取决于 field 的定义sds

SQL 参考: - INT - DEC -BETWEEN

于 2013-05-16T18:45:00.583 回答
1

表名真的是“表”吗?

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

于 2013-05-16T16:25:15.747 回答