2017-06-12 90 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 
相关问题