WHERE子句失败,带有某些字符串文字

时间:2011-10-17 22:27:33

标签: sql where-clause

我有一个存储错误消息的数据库表,我想对它们运行各种查询。首先,我通过将它们分组来获得整体计数:

select MessageText, COUNT(*) from MessageLog group by MessageText

结果是:

1  Input string was not in a correct format      4
2  Value cannot be null. Parameter name: Int     8 
3  Value cannot be null. Parameter name: String  1

现在,如果我尝试按文本字符串选择消息,即使消息存在,其中一些消息也不会返回结果。例如,

select * from MessageLog where MessageText = 'Value cannot be null. Parameter name: Int'

不返回任何结果,即使前面的查询显示其中有8个。这个字符串无法匹配的是什么?

5 个答案:

答案 0 :(得分:2)

我的猜测是你要么在你的MessageText中有空格,而你没有考虑到,或者你正在做一些你没有向我们展示的东西。我运行了以下查询:

with MessageLog as
(
    select 1 as id, 'Input string was not in a correct format' as MessageText, 4 as count
    UNION 
    select 2 as id, 'Value cannot be null. Parameter name: Int' , 8
    UNION
    select 3 as id, 'Value cannot be null. Parameter name: String' , 1
)
select * from MessageLog where MessageText = 'Value cannot be null. Parameter name: Int'

并得到了预期的结果。

答案 1 :(得分:1)

实际邮件可能包含您在第二次查询中未考虑的空格。

答案 2 :(得分:1)

我最好的猜测是一个空格问题,无论是尾随空格还是文本字符串中的额外空格。在比较之前尝试在字段上使用修剪。

答案 3 :(得分:1)

也许你在字符串的末尾有空格。为验证您可以测试:

select * from MessageLog where MessageText LIKE 'Value cannot be null. Parameter name: Int%'

或者:

select * from MessageLog where TRIM(MessageText) = 'Value cannot be null. Parameter name: Int'

答案 4 :(得分:0)

尝试将该查询的输出重定向到文本文件,然后通过od -c查看它。那里可能有一个隐藏的角色。