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

Dev*_*per 0 sql db2 ibm-midrange

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

  • 对于查询Select id, sum(field1+field2) as Total from table group by id,在德语中获取以下错误消息"[IBM] [System i Access ODBC-Treiber] [DB2füri5/ OS] SQL0104 - Token&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 - 令牌<ENDE DER ANWEISUNG>ungültig.Gültige令牌:AS CL IN LOG OUT DATA <IDENTIFIER>."
  • 对于带有子查询的查询,得到以下错误信息"[IBM] [System i Access ODBC-Treiber] [DB2füri5/ OS] SQL0104 - Token&ungültig.GültigeToken:< >= <> <= !< !> != >= ¬< ¬> ¬=IN NOT."

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

jam*_*man 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')
Run Code Online (Sandbox Code Playgroud)

UPDATE

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
Run Code Online (Sandbox Code Playgroud)

您可能需要使用DEC而不是INT依赖于字段的定义sds.

SQL参考: - INT - DEC -BETWEEN