2017-06-12 16 views
0

我有簡單的查詢,這是不工作:情況下,選擇另一列AS400查詢

SELECT BATCH_0002.CREATOR, BATCH_0002.GLEXR, 
case when BATCH_0002.GLIVD >'0' THEN BATCH_0002.GLIVD ELSE BATCH_0002.date end 
as tarih FROM BATCH_0002 

錯誤是:

ERROR: [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0581 - The results in a CASE expression are not compatible. Error Code: -581

,但是當我改變列名的東西比GLIVD不同,它是工作。

SELECT BATCH_0002.CREATOR, BATCH_0002.GLEXR, 
case when BATCH_0002.GLIVD >'0' THEN BATCH_0002.GLEXR ELSE BATCH_0002.date end 
as tarih FROM BATCH_0002 

我的病例陳述有什麼問題嗎?

+0

你可以發佈'BATCH_0002'的表定義嗎? –

+0

哪些數據類型是列GLIVD和GLEXR? – scaisEdge

回答

0

在Case語句結果數據類型應該是相同的。如果這就是爲什麼錯誤顯示爲不兼容的數據

你應該投一個數據類型到另一個

SELECT BATCH_0002.CREATOR, BATCH_0002.GLEXR, case when BATCH_0002.GLIVD >'0' THEN cast(BATCH_0002.GLIVD as char) ELSE cast(BATCH_0002.date as char) end as tarih FROM BATCH_0002 
+0

謝謝,但這是工作;當BATCH_0002.GLIVD> 0 THEN BATCH_0002.GLEXR ELSE BATCH_0002.date結束爲tarih FROM BATCH_0002 GLIVD是「數字」GLEXTR是「char(30)」DATE是「日期」 – Teo

+0

日期可以轉換爲char而不是數值 – Ravi

+0

SELECT BATCH_0002.CREATOR,BATCH_0002.GLEXR, BATCH_0002.GLIVD>'0'時的情況然後cast(BATCH_0002.GLIVD as char)ELSE BATCH_0002.date end as tarih FROM BATCH_0002 – Ravi

0

感謝您對有關數據類型所有的答案在這裏使用int和日期作爲結果。在這個信息上工作,現在解決了,這工作得很好:

SELECT BATCH_0002.CREATOR, BATCH_0002.GLEXR, 
    case when BATCH_0002.GLIVD >'0' THEN 
    DATE(CHAR(1900000 + BATCH_0002.GLIVD)) 
    ELSE BATCH_0002.date end as tarih FROM BATCH_0002 
相關問題