- 締切済み
「C#」SQL実行でのNULL値の処理方法
質問は下記のとおりです。よろしくお願いいたします。 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」という数字にしたいのですが、この処理方法をご教授お願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
多くのRDBMSで同じ機能として実装されている、coalesce関数を使うといいでしょう。 decodeやnvlはoracle独自であったり、ifnullやnullifはRDBMS間で異なる機能として実装されています。 <SQL例> select coalesce(sum(aaa),0) from A group by code;
- don_go
- ベストアンサー率31% (336/1059)
select NVL(sum(人数), 0) from データ where .... ↑ではどうですか?(ORACLEの場合) #SQL Server, ACCESSの場合は #select ISNULL(sum(人数), 0) from データ where ....
お礼
ご回答ありがとうございました。 なお、お礼が遅れまして申し訳ございません。 ちょっと自分でも悩んでみて、結果プログラムにて、 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; } のように例外処理にて解決いたしました。 ありがとうございました。
- osamuy
- ベストアンサー率42% (1231/2878)
しまった。asはこの場合使えなかった。なのでこっち。 int h1 = (int)( s_h1.ExecuteScalar() ?? 0 );
お礼
ご回答ありがとうございました。 なお、お礼が遅れまして申し訳ございません。 ちょっと自分でも悩んでみて、結果プログラムにて、 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; } のように例外処理にて解決いたしました。 ありがとうございました。
- osamuy
- ベストアンサー率42% (1231/2878)
int h1 = s_h1.ExecuteScalar() as int ?? 0; 試さないで書いてますが。
お礼
ご回答ありがとうございました。 なお、お礼が遅れまして申し訳ございません。 ちょっと自分でも悩んでみて、結果プログラムにて、 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; } のように例外処理にて解決いたしました。 ありがとうございました。
お礼
ご回答ありがとうございました。 なお、お礼が遅れまして申し訳ございません。 ちょっと自分でも悩んでみて、結果プログラムにて、 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; } のように例外処理にて解決いたしました。 ありがとうございました。