= 0,='0',IN(0),IN('0')之间的SQL差异

时间:2012-11-02 15:08:58

标签: sql database teradata

我从同事那里继承了一些代码,我注意到一些代码不一致的方式 例如,以下内容之间存在任何功能差异:

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 vs =之间没有功能差异,还有什么其他原因可以解释它(除了草率代码)?

3 个答案:

答案 0 :(得分:3)

x IN (a, b, c)表示x = a OR x = b OR x = c。当IN列表包含单个项目时,x IN (a)仅表示x = a

至于0'0'之间的差异,前者是整数,后者是字符串。后者可以转换为整数,因此当elephants也是整数时,elephants = 0elephants = '0'也会测试同样的事情。

四者之间没有真正的区别。

答案 1 :(得分:1)

=用于单个值,但IN可以在一个集合中包含多个值。

=

的示例
a = b

但是IN,而不是写多个OR

a = 1 OR a = 2 or a = 3

你可以把它写成

a IN (1,2,3)

关于单引号,如果列的数据类型是数字,则服务器会自动将字符串值解析为数值。

答案 2 :(得分: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"