我有一个存储错误消息的数据库表,我想对它们运行各种查询。首先,我通过将它们分组来获得整体计数:
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个。这个字符串无法匹配的是什么?
答案 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
查看它。那里可能有一个隐藏的角色。