2011-10-17 11 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 

さて、私は、それらのいくつかが返すテキスト文字列でメッセージを選択しようとする場合は、no結果はメッセージが存在するにもかかわらず発生します。たとえば、

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

以前のクエリには8つありますが、結果は返されません。この文字列について、一致しないものは何ですか?

+1

それはあなたのMessageText後/内の余分な空白があることだろうか? –

+0

これはSQL Server用ですか? –

+0

どのRDBMSですか?どのバージョン? –

答えて

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でクエリを実行していて、最初のクエリの結果から2番目のクエリのコマンドに直接テキストをコピーしました。私が気づいていなかったのは、元々は改行文字をスペースに置き換えた出力でした。私は私のクエリをExcelのスプレッドシートに貼り付けて、私に改行の元のテキストを表示しました。スペースの代わりに改行文字を追加すると、クエリは期待通りに機能します。ありがとう! –

1

実際のメッセージには、2番目のクエリで考慮していない空白が含まれている可能性があります。

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' 
関連する問題