我的简单查询无效:
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
我的个案陈述有问题吗?
答案 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