我正在运行IB2009,我正在尝试计算特定字段既不是空也不是空的记录数:
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() - 函数时,查询执行得很好。谁知道我做错了什么?谢谢!
答案 0 :(得分:1)
在这种情况下,我没有看到使用COUNT()有什么问题。尽管您可以尝试删除WHERE子句中的所有括号,但这并不重要。您也可以尝试使用COUNT(*)而不是COUNT(A.ID)来查看它是否会为您提供不同的结果。
在任何情况下,根据您对查询意图的描述,我认为查询不会按照您的意图执行。如果查询应该返回字段既不是NULL也不是空的行,我相信你的WHERE子句应该是
WHERE A.VARCHARFIELD1 IS NOT NULL AND
A.VARCHARFIELD1 <> ''
原来写的那个'OR'我认为你会回到表中A.VARCHARFIELD1为NOT NULL的每一行,因为“field NOT NULL”谓词将允许所有非NULL值,并且因为两个谓词由OR连接,所以第二个谓词无关紧要。
我希望这会有所帮助。