检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
当前回答
在遇到类似的情况时,我必须这样做。我的Table定义如下:
id(bigint)|name (character varying)|results(character varying)
1 | "Peters"| [{"jk1":"jv1"},{"jk1":"jv2"}]
2 | "Russel"| null
为了过滤掉结果列中的null或空,工作是:
SELECT * FROM tablename where results NOT IN ('null','{}');
这将返回结果中不为空的所有行。
我不确定如何修复此查询以返回结果上不为空的相同所有行。
SELECT * FROM tablename where results is not null;
我错过了什么,选角吗?输入吗?
其他回答
如果数据库有大量的记录,那么空检查会花费更多的时间 你可以用不同的方式使用空检查,比如: 1)其中columnname为空 2)如果不存在() 3) WHERE(当columnname为null时,则为true结束)
我喜欢yglodt的答案,但对于大的集合和大的字符串来说,计算准确的长度可能是昂贵的,所以我选择:
coalesce(trim('a') > '','f')
在遇到类似的情况时,我必须这样做。我的Table定义如下:
id(bigint)|name (character varying)|results(character varying)
1 | "Peters"| [{"jk1":"jv1"},{"jk1":"jv2"}]
2 | "Russel"| null
为了过滤掉结果列中的null或空,工作是:
SELECT * FROM tablename where results NOT IN ('null','{}');
这将返回结果中不为空的所有行。
我不确定如何修复此查询以返回结果上不为空的相同所有行。
SELECT * FROM tablename where results is not null;
我错过了什么,选角吗?输入吗?
我比较可空字段的首选方法是: NULLIF(nullablefield,:ParameterValue) IS NULL AND NULLIF(:ParameterValue, nullablefield) IS NULL。这很麻烦,但是通用的,而Coalesce在某些情况下是不可能的。
NULLIF的第二个反向使用是因为“NULLIF(nullablefield,:ParameterValue) is NULL”如果第一个参数为空,将总是返回“true”。
如果后面可能有空的空格,可能没有更好的解决方案。COALESCE只是为了解决像你这样的问题。