2012-05-05 15 views
0
select 1 where somevalue = '' or somevalue is null from sometable 

私は完全に理由を理解していますなぜ私は2つの別々の条件が必要です。何年ものあいだに、このための標準的なショートカット記法はまだありません。where where条件にnull値を含める/含めないSQLショートカットがないのはなぜですか?

私は様々なdbmsの実装が必要ではないので、そのショートカットを提供しない理由を知ることができます。そうすれば、sqlの移植性ははるかに低くなりますが、すべてのdbmsでそのようなショートカットの有用性を考えると、これを行うためのショートカットがSQL仕様に追加されていない理由を理解してください。

私の質問:実際に正当な理由はありますか、もしあればそれは何ですか?

+4

私はあなたのポイントを見ることができますが、私はそれが空のものの存在が何かの欠如とは根本的に異なるということだと思いますか? –

+2

さて、関数coalesce()は問題を解決します。なぜこれでは十分ではないのですか? –

+1

@Gordon Linoff ... coalesce()は彼が望むものを達成するでしょうが、あなたは単にcoalesceを使ってNULLを 'Chester Copperpot'に変換することもできます。私は質問を読んでいる方法は、OPは、論理的には、比較/計算/等の目的のために同じ空としてnullを扱うSQLの構成を探しているということです –

答えて

2

あなただけの

select * from table where isnull(columnname,'')='' 

またはあなたが '' の値を心配しているならば、あなたは、LTRIMおよび/またはRTRIM使用する可能性。

+0

へようこそStackOverflow:コード、XML、またはデータサンプルを投稿する場合は、テキストエディタでこれらの行を強調表示し、エディタツールバーの「コードサンプル」ボタン(「{}」)をクリックしてください。それを強調する構文! –

+0

@marc_s私はそれがあなたのためだと思った;) –

3

私はOracleで作業していましたが、空の文字列がNULLの場合はですが、これは機能しませんでしたか?

SELECT 1 FROM sometable WHERE COALESCE(somevalue, '') = '' 
+0

私はあなたのSQLはかなり面白い見つける。 'NVL'はオラクルのものであり、このアイデアが動作しない唯一の場所です(http://sqlfiddle.com/#!4/ec866/1)。オラクルで' '' 'がヌルであると言ったので –

+0

ああ、おっと。しかし、Gorgon Linoffが上に示唆したように、COALESCEもちょうどうまくいくはずです。 – eaolson

+0

これは、常にCOALESCE(somevalue、 '')= NULLのようなもので、常にfalseを返すので、Oracleではもちろんです。 –

0

問題は表示されません。奇妙なのは、Oracleを ''と同じようにNULLにするという標準に従わないことが原因です。

それはこれにに非常に簡単です:isnull(columnname,'')=''

をしかし、それはMSのみの関数である点に注意してください。coalesce(columnname,'')=''

は、MS SQL Serverでは、あなたもこれを使用することができます。

関連する問題