2017-06-12 4 views
0

を選択:ケースは、私が働いていない単純なクエリを持つ別の列のAS400クエリ

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: [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0581 - The results in a CASE expression are not compatible. Error Code: -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

「BATCH_0002」のテーブル定義を転記することはできますか? –

+0

どのデータ型が列GLIVDおよびGLEXRですか? – scaisEdge

答えて

0

Case文の結果のデータ型は同じである必要があります。ここでは、なぜエラーが互換性のないデータのために

を示すということは、あなたが別の

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 
+0

ありがとうございますが、これは動作しています。 BATCH_0002.GLIVD> 0の場合THEN BATCH_0002.GLEXR ELSE BATCH_0002.dateがtarihとして終了FROM BATCH_0002 GLIVDが "数値" GLEXTRが "char(30)" DATEが "date"の場合 – Teo

+0

日付はcharとしてキャストできますが数値ではキャストできません – Ravi

+0

SELECT BATCH_0002.CREATOR、BATCH_0002.GLEXR、 BATCH_0002.GLIVD> '0'の場合THEN cast(BATCH_0002.GLIVD char)ELSE BATCH_0002.date end をtarihからFROM BATCH_0002 – Ravi

0

に1つのデータ型をキャストする必要がある場合には、結果として、int型と日付を使用すると、データ型に関するすべての答えをありがとうございました。

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 
関連する問題