2012-01-13 6 views
1

カラムの最大値をプログラムに戻すためにSQLクエリを実行しています。カラムから最大値を選択してください。最大値を返しません。

select MAX([Line No]) from table 

は、私は、SQLサーバーを使用しています

私は実行するSQLクエリが..です2008年

表は3行、 '行いいえ' があるが、50値90を、持っている100

返されると予想される最大値は100、 ですが、私は90を得ています...なぜですか?

EDIT:

string LineNo = "0"; 

    //LineNo 
    string SQLlineno = "select MAX(CAST([Line No] As Int)) from Saved_Order_Import where [order no] = '" 
         + ordernumber + "'"; 
    SqlCommand myCommandlineno = new SqlCommand(SQLlineno, myConnection); 
    SqlDataReader readerline; 
    try 
    { 
     readerline = myCommandlineno.ExecuteReader(); 
     if (readerline.HasRows) 
     { 
      while (readerline.Read()) 
      { 
       try 
       { 
        if (readerline.GetString(0) != null) 
        { 
         LineNo = (readerline.GetString(0) + 10).ToString(); 
        } 
       } 
       catch (Exception ex) { return "{\"error\":\"line : " + ex.ToString() + "\"}"; } 
      } 
     } 
     readerline.Close(); 
    } 
    catch (Exception ex) 
    { 
     // return "{\"error\":\"Other One11" + ex.ToString() + "\"}"; 
    } 
+0

'ExecuteScalar'の私の更新を見てください –

答えて

6

あなたの列には、数値型が、文字列型(CHAR、NCHAR、VARCHAR、NVARCHAR)そうではありません。したがって、アルファベット順にソートされており、9が1に続きます。

最も簡単なのは、その列の正しいデータ型に変更することです。それができない場合は、MAX内の正しいタイプにキャストする必要があります。

例えば、あなたがフィルタリングしたい番号に変換することはできません、その列のいくつかの値を持っている場合は

select max(cast ([Line No] as int)) 
from table 

、あなたが行うことができます:のみに、

select max(cast ([Line No] as int)) 
from table 
where isnumeric([Line No]) = 1 

しますか、数値以外の値を表示して修正することができます。

select * 
from table 
where isnumeric([Line No]) = 0 

さらに強力な整数検出この記事をEE:Can I Convert This String to an Integer?

+0

ああ、それは文字列型です!代わりにどのようなクエリを使用することができるかについての提案はありますか?私は列のデータ型を変更することはできません – Beginner

+0

'select MAX(CAST([行番号]をintとして))テーブルから'はトリックを行う必要があります。 –

+0

@Beginner上記の私の更新を参照してください。 – RedFilter

1
select MAX(cast([Line No] as int)) from table 

UPADTE: はあなたのSqlCommandないGetSringExecuteScalarを呼び出します。

int max = (int)myCommandlineno.ExecuteScalar(); 
+0

ありがとうございますが、コードで作業していません。 – Beginner

+0

System.Data.SqlTypes.SqlNullValueException:データがNULLです。このメソッドまたはプロパティはNull値で呼び出すことはできません – Beginner

+0

@Beginnerエラーメッセージは何ですか? –

0

RedFilterの回答として、別のタイプの可能性があります。あなたが他の英数字の値を持っている場合は

select max(cast([Line No] as int)) from table 
+0

コードではうまく動作しません – Beginner

0

を数値型に列値をキャストして適用するには、値をキャストする必要があり

select cast(max(cast(LineNo AS int) as varchar(10)) 
from table 
where isnumeric([LineNo] = 1) 

Howeve:intに変換され、あなたがそれらを無視したいのですが、あなたはまだコードに文字列を返すようにしたい、あなたはこのような何かを行うことができますすることはできませんあなたのコラムでrでは、列が整数を保持することを意図している場合は、列の型を変更し、非整数を許容値に移行するように開発時間をスケジューリングすることをお勧めします。適切なデータ型を使用しないと、本当に問題に陥る可能性があります。

+0

コード内では機能しません – Beginner

+0

これは文字列ではなく整数です。値を取得するには 'GetInt32'を使います。また、ヌル値をチェックするには、 'IsDbNull'メソッドを使用し、値を' null'と比較しないでください。データベースドライバは決して 'null'値を返しません。' DbNull'値を返します。 – Guffa

0

:テキストデータから数値maximiumを取得するには最高の機能

select MAX(CAST(LineNo AS INT) from table 
関連する問題