1

AS400 で SQL でサブセレクトを実行しようとすると、「データ変換またはデータ マッピング エラー」が発生します。これは、SQL がサブセレクトで日付を処理する方法に関係していると確信しています (具体的には、 10進数フィールドにコンマを追加すると、次の選択時に混乱します)-誰かがこれを確認できますか?? この問題を回避する方法を提案してください??

基本的に、私は以下のようなものを持っています。日付は 10 進数で、この形式です: CCYYMMDD (つまり、日付を選択すると、CC、YYM、MDD として表示されます)。日付はtable3から来ています

SELECT *
FROM TABLE1 A
     CROSS JOIN TABLE2 B
     LEFT OUTER JOIN (SELECT *
                      FROM TABLE3 C 
                      LEFT OUTER JOIN TABLE4 D ON (blah)
                      INNER JOIN TABLE5 E  ON (blah)
                      WHERE DATE >= 20080101
                      AND   DATE <= 20090101
                     ) AS C ON (blah AND blah)
4

3 に答える 3

2

ネイティブAS400dbを使用している場合、そのフレーバーは次のとおりです。DB2 for iSeries(DB2 for Linuxおよびその他のプラットフォームと混同しないでください)

もしそうなら、そしてあなたが言うように、表3のDATEフィールドはCCYYMMDD形式の10進数です、あなたの比較はちょうどいいです。カンマは、表示用の小数に適用される形式であり、値とともに保存されません。

私はn8wrlに同意し、単純な「表3から選択してDATE> = 20080101」を試して、それが実行されるかどうかを確認し、そこから抜け出します。

何とか、何とかはとても敏感です:)

于 2009-04-07T17:51:18.330 に答える
0

この質問に適切に答えるには、AS400 がどの種類の「SQL」を処理しているかを知ることが役立ちます。AS400 自体は単なるサーバーです。AS400 は、DB2、MS SQL Server、Oracle などの多くのデータベース フレーバーで動作します。

どのSQLフレーバーかを知らずにこれを簡単に試すには、日付値を数値として扱わないように「」を付ける必要があります。

WHERE DATE >= '20080101' AND DATE <= '20090101'

于 2009-04-06T23:16:36.887 に答える