2017-06-03 18 views
1

我不确定这种情况是否仅与Coldfusion或Mysql相关。比较空字符串,如果它不等于具有字符串值的MySQL列

如果一列是TEXT类型的比较为空字符串值,如果它是不相等的,此代码的工作:

column > "" 

,但不是这一个:

column != "" 

在我SQL代码,让我们假设带有TEXT类型的数据库列附件中包含字符串。输入附件的表格值(:附件)为空(我认为它将参考“”)。

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时,它们会输入空字符串。

+0

[检查与MySQL空字段]的可能的复制(https://stackoverflow.com/questions/2327029/checking-for-an-empty-field-with-mysql) – Pyromonk

+0

不要使用双引号来比较数据库中的字符串,然后全部更改为单引号并再次测试! –

+0

为什么我不应该使用双引号? @JorgeCampos –

回答

2

我相信你应该使用<>而不是!=并且也使用单引号而不是双引号。

WHEN :attachment <> '' AND attachment <> '' 
+0

这些东西都不应该与MySQL方言实际相关。除非服务器启用了['ANSI_QUOTES'](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes),否则将接受字符串的双引号,如果启用了这些引号查询会引发错误。对于不等式,'!='和'<>'是[equivalent](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-equal)。 –