检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
检查Postgres sql语句中值是否为空或空字符串的最佳方法是什么?
Value可以是一个很长的表达式,所以在检查时最好只写一次。
目前我正在使用:
coalesce( trim(stringexpression),'')=''
但是看起来有点丑。
Stringexpression可以是char(n)列,也可以是包含char(n)列的表达式,后面带空格。
最好的方法是什么?
当前回答
我比较可空字段的首选方法是: NULLIF(nullablefield,:ParameterValue) IS NULL AND NULLIF(:ParameterValue, nullablefield) IS NULL。这很麻烦,但是通用的,而Coalesce在某些情况下是不可能的。
NULLIF的第二个反向使用是因为“NULLIF(nullablefield,:ParameterValue) is NULL”如果第一个参数为空,将总是返回“true”。
其他回答
另一种方法是
nullif(trim(stringExpression),'') is not null
我看到人们使用的是stringexpression > "。这可能不是最快的,但恰好是最短的。
在MS SQL和PostgreSQL上都试过。
检查是否为空:
coalesce(string, '') = ''
检查null, empty和空格(修剪字符串)
coalesce(TRIM(string), '') = ''
很多答案都是最短的,但不一定是最好的如果列中有很多空。分解检查可以让优化器更快地计算检查,因为它不需要在其他条件上工作。
(stringexpression IS NOT NULL AND trim(stringexpression) != '')
字符串比较不需要计算,因为第一个条件是假的。
我比较可空字段的首选方法是: NULLIF(nullablefield,:ParameterValue) IS NULL AND NULLIF(:ParameterValue, nullablefield) IS NULL。这很麻烦,但是通用的,而Coalesce在某些情况下是不可能的。
NULLIF的第二个反向使用是因为“NULLIF(nullablefield,:ParameterValue) is NULL”如果第一个参数为空,将总是返回“true”。