Firebird:为什么这个sql语句在它存在时不会找到记录?

时间:2012-05-10 17:21:15

标签: sql firebird

我有这个sql语句:

SELECT * from tBooks where BookNbr = '20111122-001'

BookNbr定义为varchar (15),记录确实存在于表中。

我认为它可能与破折号有关,但不知道为什么......

2 个答案:

答案 0 :(得分:3)

所以这可能是一个连字符与短划线与短划线问题。 (您可以通过将显示的匹配字段粘贴到ascii编辑器中来确认是否出现多字节字符。)

SELECT * from tBooks where BookNbr like '20111122%001'

以便%忽略中间的特定标点符号。

答案 1 :(得分:0)

除了@wallyk提供的解决方案之外,问题也可能是由于索引条目损坏引起的。您可以使用

绕过索引来检查这一点
SELECT * from tBooks where BookNbr||'' = '20111122-001'

如果这确实返回了记录,那么备份和恢复数据库以重建索引(或删除并重新创建索引)是明智的。