Interbase:字符串“”的转换错误

时间:2010-01-15 10:22:06

标签: sql interbase

我正在运行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() - 函数时,查询执行得很好。谁知道我做错了什么?谢谢!

1 个答案:

答案 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连接,所以第二个谓词无关紧要。

我希望这会有所帮助。