ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3996815 「C#」SQL実行でのNULL値の処理方法
質問者:oh_wareo 質問は下記のとおりです。よろしくお願いいたします。

SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con);
int h1 = (int)s_h1.ExecuteScalar();

で実行すると「指定されたキャストは有効ではありません。」とエラーが出ます。SQLで実行するとデータが無いため、値は「NULL」となっているのでintにキャストが出来ないというのは理解しました。
出来れば「NULL」の場合は「0」という数字にしたいのですが、この処理方法をご教授お願いいたします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/05/04 14:39
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

ANo.4 多くのRDBMSで同じ機能として実装されている、coalesce関数を使うといいでしょう。
decodeやnvlはoracle独自であったり、ifnullやnullifはRDBMS間で異なる機能として実装されています。

<SQL例>
select coalesce(sum(aaa),0) from A group by code;
回答者:chukenkenkou
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/04 20:51
この回答へのお礼ご回答ありがとうございました。
なお、お礼が遅れまして申し訳ございません。
ちょっと自分でも悩んでみて、結果プログラムにて、

SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con);
try{
int h1 = (int)s_h1.ExecuteScalar();
}
catch{
int h1 = 0;
}

のように例外処理にて解決いたしました。
ありがとうございました。

回答

ANo.3 select NVL(sum(人数), 0) from データ where ....
↑ではどうですか?(ORACLEの場合)

#SQL Server, ACCESSの場合は
#select ISNULL(sum(人数), 0) from データ where ....
回答者:don_go
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/05/04 19:09
この回答へのお礼ご回答ありがとうございました。
なお、お礼が遅れまして申し訳ございません。
ちょっと自分でも悩んでみて、結果プログラムにて、

SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con);
try{
int h1 = (int)s_h1.ExecuteScalar();
}
catch{
int h1 = 0;
}

のように例外処理にて解決いたしました。
ありがとうございました。

回答

ANo.2 しまった。asはこの場合使えなかった。なのでこっち。

int h1 = (int)( s_h1.ExecuteScalar() ?? 0 );
回答者:osamuy
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/05/04 18:00
この回答へのお礼ご回答ありがとうございました。
なお、お礼が遅れまして申し訳ございません。
ちょっと自分でも悩んでみて、結果プログラムにて、

SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con);
try{
int h1 = (int)s_h1.ExecuteScalar();
}
catch{
int h1 = 0;
}

のように例外処理にて解決いたしました。
ありがとうございました。

回答

ANo.1 int h1 = s_h1.ExecuteScalar() as int ?? 0;

試さないで書いてますが。
回答者:osamuy
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/04 17:56
この回答へのお礼ご回答ありがとうございました。
なお、お礼が遅れまして申し訳ございません。
ちょっと自分でも悩んでみて、結果プログラムにて、

SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con);
try{
int h1 = (int)s_h1.ExecuteScalar();
}
catch{
int h1 = 0;
}

のように例外処理にて解決いたしました。
ありがとうございました。
最新から表示回答順に表示