大小写选择另一列AS400查询

时间:2017-06-12 06:56:18

标签: 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 - The   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

我的个案陈述有问题吗?

2 个答案:

答案 0 :(得分:0)

在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

答案 1 :(得分:0)

感谢您提供有关数据类型的所有答案。研究了这些信息,现在解决了,这非常有效:

    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