2009-04-28 4 views
67

私もSQLiteのを使用していのSQLite ISNULLと等価()、NVL()、IFNULL()またはCOALESCE()

SELECT myField1, [isnull](myField1, '') 
FROM myTable1 
WHERE myField1 = someCondition 

isnull機能を認識していないようです:私のクエリは、このような何かを行うことによってヌルの世話をします。また、他のデータベース(NVL()IFNULL()COALESCE())で認識されているものと同等のものを試しましたが、SQLiteはそれを認識していないようです。

これを行うには、他に提案がありますか?残念ながら、データベースにはすべてのフィールドのデフォルト値がありません。さらに、LEFT JOIN句を使用する必要があります。LEFT JOINテーブルの一致するレコードが存在しないため、返されるフィールドの一部がnullになることがあります。

答えて

96

IFNULL、ここを参照してくださいしない:機能の周りhttp://www.sqlite.org/lang_corefunc.html#ifnull

何のブラケットを

+0

バーは角かっこです。ありがとうございました。ドキュメンテーションがサポートされていると言いましたが(私もそこに合体しています)、それは動作していませんでした。それらの日のうちの1つ... –

18

ISNULL()方法が存在しない場合は、代わりにこの表現を使うことができます。

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END 

を。これは、同じように動作しますISNULL(fieldname, 0)となります。両方の引数がNULLであれば

+1

関数 'ifnull'は、質問が質問していた' isnull'関数のSQLiteに相当します。これを今読んでいる人には、CASEを使って独自の解を書く前にSQLMenaceの答え(1年半前から)を見てください。 – spaaarky21

+0

@ spaaarky21 - あなたは良い点を作っています。しかし、この答えは、単体テストのためだけにsqliteを使用し、ライブコードに別のRDBMSを使用する場合に役立ちます。その場合、 'CASE'文のようなものを使用すると' IFNULL'よりも意味があるかもしれません。 –

+1

@sethflowersより多くのRDBMS中立な方法でヌルデフォルト値を実装する際の値を見ることができますが、これは別の質問に対する答えです。 :) OPは単に他のシステムでisiteをisqlに置き換えるよう要求しているので、私は人々に "自分のロールを張る"ことを奨励したくありません。 – spaaarky21

30

試してみてください。この

ifnull(X,Y) 

例えば

select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with '' 
select ifnull(NULL,'THIS IS NULL');-- More clearly.... 

ifnull()機能は、その最初の非NULLの引数、またはNULLのコピーを返します。 Ifnull()には2つの引数が必要です。 ifnull()関数は、2つの引数を持つcoalesce()に相当します。

+0

はい、私はそれが「ifnull」であることを理解しました。私が使用していた角括弧を削除するだけでした。 –

+1

私の答えはなぜ投票されていますか? –

+0

@ HardikDarji何人かのdownvoteの幸せな管理者が "これを試してください"という言葉を見て、それ以上読むことはないので。または、誰かが誤ってifnull()とcoalesce()の比較が誤っていると仮定しているため、他のデータベース環境(sqliteではなく)と同じです。いずれにせよ、誰が気にします。 「これを試してください」という答えは、「ドキュメントを読む」よりも優れています。私は答えを含んでいるコード以外のものを除いたり、毎回読むことさえしません。答えをありがとう! – maplemale

-2

簡単にそのような関数を定義し、それを使用することができ:

ifnull <- function(x,y) { 
    if(is.na(x)==TRUE) 
    return (y) 
    else 
    return (x); 
} 

又は同じ縮小さ版:代わりISNULL()メソッドのWHERE句内

ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);} 
+1

これはSQLiteではありません。 –

2

使用IS NULL又はIS NOT NULL

SELECT myField1 
FROM myTable1 
WHERE myField1 IS NOT NULL 
+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – abarisone

+0

これは質問された内容とは関係ありません。 OPは、 'myField1'が非null値を持つ行をフィルタリングしたくない場合、行値がnullの場合、結果列の値を別の値に置き換えたいと考えます。 –

関連する問題