Sql 案例选择另一列AS400查询

Sql 案例选择另一列AS400查询,sql,ibm-midrange,Sql,Ibm Midrange,我有一个不起作用的简单查询: 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 错误是: 错误:[IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0581-错误 CASE表达式中的结果不兼

我有一个不起作用的简单查询:

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
错误是:

错误:[IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0581-错误 CASE表达式中的结果不兼容。错误代码: -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

我的case语句有问题吗?

case语句中的结果数据类型应该相同。这里使用int和date作为结果,以防出现不兼容数据的错误

您应该将一种数据类型强制转换为另一种数据类型

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

感谢您提供有关数据类型的所有答案。根据此信息进行了处理,现在已解决,效果非常好:

    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

能否发布
BATCH_0002
的表格定义?哪些数据类型是GLIVD列和GLEXR列?谢谢,但这是可行的;当BATCH_0002.GLIVD>0时,则BATCH_0002.GLEXR ELSE BATCH_0002.date结束为tarih从BATCH_0002.GLIVD开始的日期为“数值”Glexter为“字符(30)”日期为“日期”日期可以转换为字符,但不能转换为数值选择BATCH_0002.CREATOR,BATCH_0002.GLEXR,当BATCH_0002.GLIVD>0时,则转换为“字符”(BATCH_0002.GLIVD为字符)ELSE批次_0002。日期结束为批次_0002中的tarih