使用快捷方式简化SQL Server查询

时间:2017-10-09 20:28:02

标签: sql-server

我有一个查询,其中许多列可以为空或空。实际上它们的名称比下面的示例更长,我将其用作示例:

 select * 
 from table1 
 where field1 is not null and field1 != '' and
       field2 is not null and field2 != ''
 ...etc

必须输入

令人厌烦
x is not null and x != ''.

是否有某种方法可以指定“x不为空且x!=''”?

与Java一样

StringUtils.isNotEmpty(x)

4 个答案:

答案 0 :(得分:0)

尝试

WHERE NULLIF(field1, '') IS NULL

答案 1 :(得分:0)

我用

where isnull(x, '') <> ''
很多。我发现它更容易理解&#34;比nullif

- 编辑---------------------------------------

我错过了他们都和他们在一起。因此,如果所有N个字段必须为非null且不为空,假设所有字段都是字符串(varchars),则应该这样做:

where isnull(field1 + field2 + field3 + ... + fieldN,  '') <> ''

首先,将字符串连接在一起:

  • 如果any为null,则结果为null
  • 如果没有为空且全部为空,则结果为空字符串
  • 否则,结果将是非空字符串

接下来,结果为isnulled

  • 如果连接值为null,则将其设置为空字符串
  • 否则,您将获得连接的内容(空或非空字符串)

最后,将其与空字符串进行比较:

  • 如果为True,则全部为空或者一个或多个为空
  • 如果为False,则均为空,且至少有一个不为空

答案 2 :(得分:0)

对于SQL Server,我会使用COALESCE:

WHERE COALESCE(field1, '') > ''

ISNULL也有效

答案 3 :(得分:0)

如果要排除每个字段为空或空白的行,可以这样做:

WHERE COAlESCE(Field1,Field2,Field3,Field4,Field5,'') <> ''