我不确定这种情况是否仅与coldfusion或mysql有关。
如果将类型文本的列与空字符串值不等的列进行比较,则该代码有效:
column > ""
但不是这个:
column != ""
在我的SQL代码中,假设具有文本类型的数据库列附件中包含字符串。输入附件的形式值(:attactment (为空(我认为它将参考" (。
attachment = (
CASE
WHEN :attachment = "" AND attachment = ""
THEN 1
WHEN :attachment = "" AND attachment != ""
THEN 2
WHEN :attachment != "" AND attachment = ""
THEN 3
WHEN :attachment != "" AND attachment != ""
THEN 4
ELSE attachment
END
)
此代码将返回附件=3。
但是,如果我使用此SQL代码:
attachment = (
CASE
WHEN :attachment = "" AND attachment = ""
THEN 1
WHEN :attachment = "" AND attachment > ""
THEN 2
WHEN :attachment > "" AND attachment = ""
THEN 3
WHEN :attachment > "" AND attachment > ""
THEN 4
ELSE attachment
END
)
此代码返回附件= 2,这是我真正希望拥有的。
那么,如果列相等,或者不等于空字符串,则比较列的最佳方法是什么?我很少使用空值,因为保存形式后,它们输入空字符串。
我相信您应该使用<>而不是!=,也使用单引号代替双引号,例如。
WHEN :attachment <> '' AND attachment <> ''
警告:切勿使用column > ''
我刚刚使用MySQL 5.7有一些情况,其中column > ''
导致false,但是 column < ''
导致了true !!
更好地检查LENGTH(column)