2011-10-17 26 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' 
相關問題