2

同僚からいくつかのコードを継承しましたが、一部のコードが一貫していないことに気付きました。たとえば、次の機能の違いは次のとおりです。

sum(case when (elephants = 0)then 1 else 0 end),

sum(case when (elephants = '0')then 1 else 0 end),

sum(case when (elephants IN (0))then 1 else 0 end),

sum(case when (elephants IN ('0'))then 1 else 0 end);

単一のqutoesまたはINと=を使用して単一の値を検索するときに機能的な違いがない場合、他にどのような理由が原因である可能性がありますか(ずさんなコード以外)?

4

3 に答える 3

3

x IN (a, b, c)を意味しx = a OR x = b OR x = cます。INリストに単一の項目が含まれている場合は、単にx IN (a)。を意味しx = aます。

0との違いは'0'、前者は整数、後者は文字列です。後者は整数に変換できるので、もelephants整数でelephants = 0ありelephants = '0'、同じことをテストします。

4つの間に実際の違いはありません。

于 2012-11-02T15:12:56.173 に答える
1

=は単一の値用ですが、セット内に複数のIN値を持つことができます。

の例=

a = b

しかし、のためINに、複数を書く代わりにOR

a = 1 OR a = 2 or a = 3

あなたはそれを次のように書くことができます

a IN (1,2,3)

一重引用符については、列のデータ型が数値の場合、サーバーは文字列値を自動的に数値に解析します。

于 2012-11-02T15:12:05.993 に答える
1

要するに:

= 0 //equal to the number zero
= '0' //equal to the string "0"
IN (0) //appears in the list in parenthesis. In this case, the single-item list of numerical zero
IN ('0') //appears in the list in parenthesis. In this case, the single-item list of string "0"
于 2012-11-02T15:14:20.297 に答える