1

IB2009 を実行していて、特定のフィールドが NULL でも空でもないレコードの数を数えようとしています。

SELECT COUNT(A.ID) FROM MYVIEW A
WHERE ((A.VARCHARFIELD1 IS NOT NULL) OR (A.VARCHARFIELD1 <> ''))

ここで、MYVIEW は VIEW、MYVIEW.ID は INTEGER、MYVIEW.VARCHARFIELD1 は VARCHAR(18) です。

エラーメッセージが表示されます

1 行目のエラー、文字列 "" からの変換エラー

COUNT() 関数を削除すると、クエリが適切に実行されるため、これはよくわかりません。私が間違っていることを誰か知っていますか?ありがとう!

4

1 に答える 1

1

この場合、COUNT() を使用しても問題はありません。重要ではありませんが、WHERE 句の括弧をすべて削除してみてください。COUNT(A.ID) の代わりに COUNT(*) を使用して、異なる結果が得られるかどうかを確認することもできます。

いずれにせよ、クエリの意図の説明に基づいて、クエリが意図したとおりに実行されるとは思いません。クエリがフィールドが NULL でも空でもない行を返すことになっている場合、WHERE 句は

WHERE A.VARCHARFIELD1 IS NOT NULL AND
      A.VARCHARFIELD1 <> ''

最初に書かれたように「OR」を使用すると、「field NOT NULL」述語がすべての非 NULL 値を許可するため、A.VARCHARFIELD1 が NOT NULL であるテーブルのすべての行が返されると思います。 2 つの述語が OR で結合されている場合、2 番目の述語は重要ではありません。

これが役立つことを願っています。

于 2010-01-15T12:11:51.963 に答える