2011-10-17 27 views
2

我有一个存储错误消息的数据库表,并且我想对它们运行各种查询。首先,我将它们分组这样得到的总次数:WHERE子句使用某些字符串文字失败

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个结果。这个字符串无法匹配的是什么?

+1

难道有额外的空格/你MessageText中后? –

+0

这是用于SQL Server吗? –

+0

哪个RDBMS?哪个版本? – 2011-10-17 22:30:55

回答

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' 

并且得到了预期的结果。

+0

它看起来很多人都碰到了这个问题的主要要点,但我选择了这个答案,因为有相同的查询。我在Microsoft SQL Server Management Studio中运行我的查询,并将文本直接从第一个查询的结果复制到第二个查询的命令中。我没有意识到的是,输出已经用空格替换了原来是换行符的东西。我将查询粘贴到Excel电子表格中,并向我显示带有换行符的原始文本。当我添加换行符代替空格时,查询按预期工作。谢谢 ! –

1

实际消息可能包含您在第二个查询中未计入的空白区域。

0

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

1

我最好的猜测是一个空白问题,在文本字符串里面有空格或多余的空格。在比较它们之前,尝试在字段上使用修剪。

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' 
相关问题