Left(null,5)<>“任何东西”都不正确吗? [T-SQL]

时间:2018-07-14 14:27:20

标签: sql sql-server null

在下面的最后一个select语句中,为什么在关闭ansi_nulls的情况下“ left(null,8)<>'anything'‌”不成立?

我试图找到一种方法来避免像这样的违反直觉的null比较结果,而不必在脚本中的任何地方使用isull()或Coalesce()。 ‌‌  ‌

 set ansi_nulls off
  s‌elect 'true' where null <> 'anything'  ----> This returns 'true'
  s‌elect 'true' where left(null,8) = null  ----> This returns 'true'
  s‌elect 'true' where left(null,8) <> 'anything'‌ ----> **This returns nothing**
‌‌

1 个答案:

答案 0 :(得分:0)

无论ansi_nulls是打开还是关闭,始终使用 isnull

  select 'true' where  isnull( left(null ,8) , '') <> 'anything' ----> This returns 'true'

无论ansi_nulls是打开还是关闭,始终使用 isnull

  select 'true' where  isnull( left(null ,8) , '') <> 'anything' ----> This returns 'true'

修改

感谢 Gordon Linoff

然后使用 COALESCE 并且不要使用isull

select 'true' where  COALESCE ( left(null ,8) , '') <> 'anything' ----> This returns 'true'