排除 WHERE 子句中的空白和空值

Par*_*war 1 sql postgresql null database-performance

很多时候我必须运行这个查询:

select * from users where name is not null and name != ''
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点。我需要更多的性能,任何建议。我想这是很常见的,所以可能会有一些编译的函数,就像

select * from users where name is present()
Run Code Online (Sandbox Code Playgroud)

使用 PostgreSQL 9 版本。

mu *_*ort 6

对于任何x,null != x将是null和null不是true。这意味着您可以简单地忽略您的案例中的 NULL 并说:

select * from users where name != ''
Run Code Online (Sandbox Code Playgroud)

如果您更清楚,您还可以使用 COALESCE 将 NULL 转换为空字符串:

select * from users where coalesce(name, '') != ''
Run Code Online (Sandbox Code Playgroud)

当然,那个coalesce电话不是免费的。

演示:http : //sqlfiddle.com/#!2/e810c/2

  • 关键是,不像其他一些 RDBMS Postgres 实现了一个适当的、功能齐全的、符合 SQL 标准的 [`boolean` 类型](http://www.postgresql.org/docs/current/interactive/datatype-boolean.html) , 可以是 `NULL`,就像任何其他数据类型一样。并且`NULL` 不是`FALSE`。`NULL` 会让一些人感到困惑,所以我尽量避免这种误导性的陈述。碰巧只有“TRUE”才符合“WHERE”子句的条件。我喜欢你的更新。:) (2认同)