![](/img/trans.png)
[英]Why is this AS400 DB2 select case surprisingly resolving to null?
[英]Case select another column AS400 query
我有一个不起作用的简单查询:
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] [系统i访问ODBC驱动程序] [用于i5 / OS的DB2] 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语句中,结果数据类型应相同。 在这里使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.