检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
当前回答
如果后面可能有空的空格,可能没有更好的解决方案。COALESCE只是为了解决像你这样的问题。
其他回答
检查字符串的长度也是有效的,并且是紧凑的:
where length(stringexpression) > 0;
我比较可空字段的首选方法是: NULLIF(nullablefield,:ParameterValue) IS NULL AND NULLIF(:ParameterValue, nullablefield) IS NULL。这很麻烦,但是通用的,而Coalesce在某些情况下是不可能的。
NULLIF的第二个反向使用是因为“NULLIF(nullablefield,:ParameterValue) is NULL”如果第一个参数为空,将总是返回“true”。
发现这篇文章寻找一个解决方案,“不要显示我的数据是”(空白或单一空格字符)或null”。在我的例子中,我们只想显示填充了这些值的用户记录。我希望这样的回应能帮助到其他有同样想法的人。上述答案在我的案例中并不适用。
我们的应用程序使用postgres运行rails。查看rails如何构建.where的查询。不是(company_website: [nil, "])在我们的应用程序,这工作得很好,我可以看到控制台的结果SQL语句。
WHERE NOT ((contacts.company_website = " OR contacts.company_website IS NULL))
我添加了这一点,它的工作作为预期。
检查是否为空:
coalesce(string, '') = ''
检查null, empty和空格(修剪字符串)
coalesce(TRIM(string), '') = ''
如果数据库有大量的记录,那么空检查会花费更多的时间 你可以用不同的方式使用空检查,比如: 1)其中columnname为空 2)如果不存在() 3) WHERE(当columnname为null时,则为true结束)