简体   繁体   English

案例选择另一列AS400查询

[英]Case select another column AS400 query

I have simple query which is not working: 我有一个不起作用的简单查询:

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

ERROR: [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0581 - The results in a CASE expression are not compatible. 错误:[IBM] [系统i访问ODBC驱动程序] [用于i5 / OS的DB2] SQL0581-CASE表达式中的结果不兼容。 Error Code: -581 错误代码:-581

but when I change column name to something different than GLIVD , it is working. 但是,当我将列名更改为与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

Is there something wrong with my case statement? 我的案件陈述书有问题吗?

In Case statement result datatype should be same. 在Case语句中,结果数据类型应相同。 Here Using int and date as result in case that's why error showing for incompatible data 在这里使用int和date作为结果,以防万一,这就是为什么错误显示不兼容的数据

you should cast one datatype to another 您应该将一种数据类型转换为另一种数据类型

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

thank you for all answers regarding data types. 感谢您提供有关数据类型的所有答案。 worked on this information and now solved, this works very well: 处理了这些信息,现在解决了,效果很好:

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM