检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?

Value可以是一个很长的表达式,所以在检查时最好只写一次。

目前我正在使用:

coalesce( trim(stringexpression),'')=''

但是看起来有点丑。

Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。

最好的方法是什么?


当前回答

我看到人们使用的是stringexpression > "。这可能不是最快的,但恰好是最短的。

在MS SQL和PostgreSQL上都试过。

其他回答

如果后面可能有空的空格,可能没有更好的解决方案。COALESCE只是为了解决像你这样的问题。

很多答案都是最短的,但不一定是最好的如果列中有很多空。分解检查可以让优化器更快地计算检查,因为它不需要在其他条件上工作。

(stringexpression IS NOT NULL AND trim(stringexpression) != '')

字符串比较不需要计算,因为第一个条件是假的。

发现这篇文章寻找一个解决方案,“不要显示我的数据是”(空白或单一空格字符)或null”。在我的例子中,我们只想显示填充了这些值的用户记录。我希望这样的回应能帮助到其他有同样想法的人。上述答案在我的案例中并不适用。

我们的应用程序使用postgres运行rails。查看rails如何构建.where的查询。不是(company_website: [nil, "])在我们的应用程序,这工作得很好,我可以看到控制台的结果SQL语句。

WHERE NOT ((contacts.company_website = " OR contacts.company_website IS NULL))

我添加了这一点,它的工作作为预期。

我看到人们使用的是stringexpression > "。这可能不是最快的,但恰好是最短的。

在MS SQL和PostgreSQL上都试过。

另一种方法是

nullif(trim(stringExpression),'') is not null