2017-06-03 4 views
1

Je ne suis pas sûr si ce scénario est lié uniquement à Coldfusion ou Mysql.Comparaison de chaînes vides si elle n'est pas égale à la colonne MySQL avec des valeurs de chaîne

Si une colonne est de type TEXT est comparée à une valeur de chaîne vide si elle ne correspond pas, ce code fonctionne:

column > "" 

mais pas celui-ci:

column != "" 

Dans mon Code SQL, disons que la pièce jointe d'une colonne de base de données avec un type TEXT contient des chaînes. La valeur de formulaire de la pièce jointe d'entrée (: pièce jointe) est vide (je pense qu'il se référera à "").

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 
) 

ce code retournerait attachment = 3.

Cependant, si j'utilise ce code 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 
) 

Ce code renvoie attachment = 2 qui est ce que j'attendais vraiment avoir . Alors, quelle est la meilleure façon de comparer une colonne si elle est égale ou si elle n'est pas égale à une chaîne vide? J'utilise rarement les valeurs NULL parce que quand les formes sont sauvegardées, elles entrent des chaînes vides.

+0

double possible de [Contrôle pour un champ vide avec MySQL] (https://stackoverflow.com/questions/2327029/checking-for-an-empty-field-with-mysql) – Pyromonk

+0

Ne pas utiliser les guillemets doubles pour comparer les chaînes dans la base de données changent tous de guillemets simples et le testent encore! –

+0

Pourquoi ne devrais-je pas utiliser des guillemets doubles? @JorgeCampos –

Répondre

2

Je crois que vous devriez utiliser <> au lieu de! = Et aussi utiliser des guillemets simples plutôt que des guillemets doubles, par ex.

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

Aucune de ces choses ne devrait être pertinente dans le dialecte MySQL. Les guillemets doubles pour les chaînes sont acceptés à moins que le serveur ne possède ['ANSI_QUOTES'] (https://dev.mysql.com/doc/refman/5.7/fr/sql-mode.html#sqlmode_ansi_quotes) activé, et si c'est le cas, ces les requêtes jetteraient une erreur. Pour l'inégalité, '! =' Et '<>' sont [équivalent] (https://dev.mysql.com/doc/refman/5.7/fr/comparison-operators.html#operator_not-equal). –