2013-05-16 32 views
0

在AS400中,如何在字段上執行算術運算(如+, - )。無法在AS400中運行SQL查詢,遇到無效令牌錯誤

  • 對於查詢Select id, sum(field1+field2) as Total from table group by id,收到以下錯誤味精德國「[IBM] [系統 我訪問ODBC-二極管驅動器] [DB2獻給的i5/OS] SQL0104 - 令牌&ungültig Gültige令牌:+ - AS <IDENTIFIER>「。英語翻譯是 類似於「[IBM] [System i Access ODBC Driver] [DB2 for i5/OS] SQL0104 - 標記<END Instruction>無效。
  • 對於查詢Select count(*) from (select distinct field1 from table where field2="abc",得到以下錯誤消息 「[IBM] [System i的訪問ODBC-二極管驅動器] [DB2獻給的i5/OS] SQL0104 - 令牌<ENDE DER ANWEISUNG>ungültigGültige令牌:。AS CL在註銷DATA <IDENTIFIER>
  • 對於子查詢的查詢有以下錯誤味精 「[IBM] [System i的訪問ODBC-二極管驅動器] [DB2獻給的i5/OS] SQL0104 - 令牌&ungültigGültige令牌:<> = <><=!<!>!=>=¬<¬>¬= IN NOT。「

有人能告訴我我的sql查詢出了什麼問題。

+1

看起來你向我們展示的僞代碼,查詢時可能有其他的列名和表名。通過創建psuedocode,它看起來像引入了新的語法錯誤。請向我們展示您的**實際代碼**,以便我們可以準確診斷您的**實際問題**。 – WarrenT

+0

我真的很抱歉那個僞代碼。這個客戶數據庫幾乎沒有敏感數據。我的查詢(帶有虛擬名稱)就像這樣「選擇EDS,sum(val(SDS))作爲totalb從tbl1,其中EDS&'like'201305 [0-9] [0-9]'並且選擇了不同的('1234')和PERIOD = 201305中的H_04通過EDS按EDS順序分組的tb12的SITE「。問題不在保留關鍵字表中。必須使用&和兩個單引號(''),因爲EDS字段的類型是Numeric。 – Developer

回答

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') 

UPDATE

DB/2對於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根據現場sds的定義。

SQL參考: -​​3210 - DEC - BETWEEN

+0

這是發佈內容的好回答。但是,基於給出的通用名稱和他顯示的錯誤問題,在我看來,SQL代碼在複製錯誤後變成了僞代碼。所以我們可能一直在追蹤一隻紅鯡魚。 – WarrenT

+0

@詹姆斯,謝謝sooooo很多答案。我會進行修改並讓客戶端對此進行測試。我會盡快給你一個更新。 – Developer

+0

@詹姆斯,謝謝你的回答。你是一個絕對的天才。它運作良好。謝謝 - 斯里。 – Developer

1

表名真的是'表'嗎?

看起來很奇怪,如果我使用你所指出的SQL語句,我會得到同樣的錯誤......但是如果我將'table'更改爲'table1',它只是抱怨它找不到'表格1'。

+1

我想說你是在正確的軌道上。看起來他在發佈之前更改了表名。在第二個查詢中,它看起來像他最初有'sum(field1&field2)',但是當他重新輸入它時,'&'變成了一個'+'。 – WarrenT

相關問題