質問 |
||
| 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; } のように例外処理にて解決いたしました。 ありがとうございました。 |