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(*) 而不是 COUNT(A.ID) 来查看它是否会给您带来不同的结果。

无论如何,根据您对查询意图的描述,我认为查询不会按照您的意图进行。如果查询应该返回字段既不是 NULL 也不是空的行,我相信你的 WHERE 子句应该是

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

使用最初编写的“OR”,我认为您将返回表中 A.VARCHARFIELD1 不是 NULL 的每一行,因为“字段 NOT NULL”谓词将允许所有非 NULL 值,并且由于两个谓词由 OR 连接,第二个谓词无关紧要。

我希望这有帮助。

于 2010-01-15T12:11:51.963 回答