C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: SQLでSELECT内容がNULLなら0にした


(過去ログ 13 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■3865 / inTopicNo.1)  SQLでSELECT内容がNULLなら0にした
  
□投稿者/ 質問 (12回)-(2007/05/25(Fri) 21:24:01)

分類:[データベース全般] 

2007/05/25(Fri) 23:14:26 編集(投稿者)

掲題とおりですが
@SELECT (case complete when null then '0' else complete end)as complete FROM customer where ivalue =0
ASELECT isnull(complete,0)as complete FROM customer where ivalue =0
共にivalueが0の場合NULLが返ってきます。やはりwhere句を使うとだめなんでしょうか
原因と解決策を教えていただけると助かります。

お願い致します

すみません質問が間違ってました
ivalueが0の場合completeがNULLがかえってくるのでそれを0にしたいんです。
すみません
引用返信 編集キー/
■3866 / inTopicNo.2)  Re[1]: SQLでSELECT内容がNULLなら0にした
□投稿者/ 魔界の仮面弁士 (286回)-(2007/05/25(Fri) 22:16:30)
2007/05/25(Fri) 22:30:34 編集(投稿者)
No3865 (質問 さん) に返信
> (1) SELECT (case complete when null then '0' else complete end)as complete FROM customer where ivalue =0
> (2) SELECT isnull(complete,0)as complete FROM customer where ivalue =0

SELECT 句に指定されているのは、ivalue 列ではなく complete 列ですが、それで良いのですよね?

ivalue が NULL なレコードを取得したいのであれば、「WHERE ivalue IS NULL」ですし、
ivalue が0 または NULL なレコードが必要なら、「WHERE (ivalue IS NULL) OR (ivalue = 0)」です。


> 共にivalueが0の場合NULLが返ってきます。
下記データを用いて SQL Server 2005で検証しましたが、再現しません。
(1)(2) いずれの構文でも、「x」という値が返されました。

CREATE TABLE customer ( complete CHAR(1), ivalue NUMERIC(1) );
INSERT INTO customer VALUES ( 'x',  0);
INSERT INTO customer VALUES ( null, 1);
INSERT INTO customer VALUES ( 'y',  null );

引用返信 編集キー/
■3869 / inTopicNo.3)  Re[1]: SQLでSELECT内容がNULLなら0にした
□投稿者/ 魔界の仮面弁士 (287回)-(2007/05/26(Sat) 02:28:38)
No3865 (質問 さん) に返信
> すみません質問が間違ってました
ありゃま。(^^;

それはともかく、まずはどのデータベースを使っているか書きましょう。
構文からして、Sybase ASE か Microsoft SQL Server あたりかとは思いますが、
SQL 文には、データベースごとの「方言」がありますし。

で。

> ivalueが0の場合completeがNULLがかえってくるのでそれを0にしたいんです。
う〜ん。その構文で変換できると思うのですけれどね。

手元の SQL Server 2005 においては、
CREATE TABLE customer ( complete CHAR(1), ivalue NUMERIC(1) );
 INSERT INTO customer VALUES ( 'a', -1);
 INSERT INTO customer VALUES ( null, 0);
 INSERT INTO customer VALUES ( 'Z', 1);

SELECT complete AS C1, ISNULL(complete, 0) AS C2 FROM customer WHERE ivalue = 0
において、C1 = null, C2 = 0 という結果になりましたし。
引用返信 編集キー/
■3870 / inTopicNo.4)  Re[2]: SQLでSELECT内容がNULLなら0にした
□投稿者/ まさる (5回)-(2007/05/26(Sat) 08:33:20)
>ivalueが0の場合completeがNULLがかえってくるのでそれを0にしたいんです。
ivalue=0のデータがそもそもテーブルに無いとかそんなオチはないですよね?
引用返信 編集キー/
■3871 / inTopicNo.5)  Re[3]: SQLでSELECT内容がNULLなら0にした
□投稿者/ Mr.T (50回)-(2007/05/26(Sat) 09:03:06)
2007/05/26(Sat) 14:38:00 編集(投稿者)

Mr.Tです、こんにちは。

No3870 (まさる さん) に返信
> >ivalueが0の場合completeがNULLがかえってくるのでそれを0にしたいんです。
> ivalue=0のデータがそもそもテーブルに無いとかそんなオチはないですよね?

SQLやデータに問題なければ、魔界の仮面弁士さんのサンプル通りと思いますが、

SELECT count(complete) FROM customer where ivalue =0
で何が返ってくるか、ということですね。

#しかし、データがなかった場合に、NULLと勘違いするケースって
#いったい何を使って確認した場合でしょう?


引用返信 編集キー/
■3878 / inTopicNo.6)  Re[4]: SQLでSELECT内容がNULLなら0にした
□投稿者/ 片桐 (8回)-(2007/05/26(Sat) 13:49:50)
片桐 さんの Web サイト
質問さんの最初のSQL、

ivalue =0 のデータが無ければ、VBやVCなどでからSQLを発行した場合
データベースオブジェクトの取得列データオブジェクトは確かにNULLになります。
Count集合関数の場合なら、取得列データは「0」を返せますけれどね。

SQL-Serverの場合、isnull(0,Complete)
Oracleの場合 、nvl(Complete,0)

で取得できた値がNULLだったら、0に変換して取得列に返す。存在しない場合はやっぱりNULLです



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -