【发布时间】:2017-11-04 11:19:49
【问题描述】:
我不确定这种情况是否仅与 Coldfusion 或 Mysql 有关。
如果将 TEXT 类型的列与不相等的空字符串值进行比较,则此代码有效:
column > ""
但不是这个:
column != ""
在我的 SQL 代码中,假设具有 TEXT 类型的数据库列附件中包含字符串。 Input Attachment (:attachment)的Form值是空的(我想应该是指"")。
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,这是我真正期望的。
那么,比较列是否相等或不等于空字符串的最佳方法是什么?我很少使用 NULL 值,因为当保存 FORM 时,它们输入的是空字符串。
【问题讨论】:
-
不要使用双引号来比较数据库中的字符串,然后全部改为单引号并再次测试!
-
为什么不能使用双引号? @JorgeCampos
-
@Pyromonk 我正在检查它是否不相等,而不是是否相等。我检查了您标记的链接,但似乎没有找到我问题的确切答案。
-
SQL ANSI 标准。双引号用于标识符,就像您正在创建新列名一样。单引号用于字符串比较。
标签: mysql string coldfusion-2016