Dans MySQL, puis-je sélectionner des colonnes uniquement là où quelque chose existe?
Par exemple, j'ai la requête suivante:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
J'essaie de sélectionner uniquement les lignes où le téléphone commence par 813 et phone2 contient quelque chose.
phone2
contient quelque chose»? Les gens se demandent si vous voulez direphone2
IS NOT NULL, n'est pas vide, n'est pas exclusivement des espaces blancs, etc.Réponses:
Comparez la valeur de
phone2
avec une chaîne vide:Notez que la
NULL
valeur est interprétée commefalse
.la source
phone2<>""
ne franchira aucun vérificateur de syntaxe SQL.Pour vérifier si le champ est utilisé NULL
IS NULL
, lesIS NOT NULL
opérateurs.Référence MySql http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
la source
Vérifiez
NULL
et videz les valeurs de chaîne:NB Je pense que COALESCE () est le standard SQL (-ish), alors que ISNULL () ne l'est pas.
la source
Une réponse que j'utilise et qui fonctionne assez bien pour moi que je n'ai pas déjà vue ici (cette question est très ancienne, donc elle n'a peut-être pas fonctionné à l'époque) est en fait
Notez la
> ''
partie, qui vérifiera si la valeur n'est pas nulle et si la valeur n'est pas simplement un espace ou un blanc.Fondamentalement, si le champ contient quelque chose d'autre qu'un espace blanc ou
NULL
, c'est vrai. Il est aussi super court, il est donc facile d'écrire, et un autre plus surCOALESCE()
etIFNULL()
fonctions est que cela est compatible avec les index, car vous ne comparez pas la sortie d'une fonction sur un champ à quoi que ce soit.Cas de test:
MISE À JOUR Il y a une mise en garde à ce que je ne m'attendais pas, mais les valeurs numériques qui sont nulles ou inférieures ne sont pas supérieures à une chaîne vide, donc si vous avez affaire à des nombres qui peuvent être nuls ou négatifs, NE FAITES PAS CELA , cela m'a mordu très récemment et a été très difficile à déboguer :(
Si vous utilisez des chaînes (char, varchar, text, etc.), alors ce sera parfaitement bien, faites juste attention aux chiffres.
la source
S'il y a des espaces dans le champ phone2 suite à une saisie de données par inadvertance, vous pouvez ignorer ces enregistrements avec les fonctions IFNULL et TRIM:
la source
la source
NULL
valeur et une chaîne vide''
qui est une valeur. Si vous voulez vérifier une chaîne vide, utilisezcolumn <> ''
comme suggéré par les autres réponses.Peut nécessiter quelques ajustements en fonction de votre valeur par défaut. Si vous avez autorisé le remplissage Null, vous pouvez faire "Not NULL" à la place, ce qui est évidemment mieux.
la source
NOT()
fonction dans MySQL 2)phone2=""
ne le fera pas passer un vérificateur de syntaxe SQL.Nous pouvons utiliser CASE pour définir une valeur vide sur un caractère ou une chaîne. J'utilise NA comme chaîne par défaut.
la source
Une autre alternative consiste à examiner spécifiquement
CHAR_LENGTH
les valeurs des colonnes. (à ne pas confondre avecLENGTH
)L'utilisation d'un critère où la longueur des caractères est supérieure à 0, évitera les faux positifs lorsque les valeurs de colonne peuvent être fausses, comme dans le cas d'une colonne entière avec une valeur de
0
ouNULL
. Se comporter de manière plus cohérente sur différents types de données.Ce qui donne une valeur d'au moins 1 caractère ou non vide.
Exemple https://www.db-fiddle.com/f/iQvEhY1SH6wfruAvnmWdj5/1
Données de table
CHAR_LENGTH(phone2) > 0
Résultats (identiques)Alternatives
phone2 <> ''
Résultats (différents)phone2 > ''
Résultats (différents)COALESCE(phone2, '') <> ''
Résultats (identiques)Remarque: les résultats diffèrent de
phone2 IS NOT NULL AND phone2 <> ''
ce qui n'est pas attenduphone2 IS NOT NULL AND phone2 <> ''
Résultats (différents)la source
Étonnamment (comme personne d'autre ne l'a mentionné auparavant) a constaté que la condition ci-dessous fait le travail:
lorsque nous devons exclure les valeurs nulles et vides. Quelqu'un est-il conscient des inconvénients de l'approche?
la source
Utilisation:
la source
IS NOT NULL
n'est pas appliqué aux colonnes de chaînes uniquement avec des valeurs vides (''
). Je ne sais pas pourquoi, mais je voulais juste le souligner. Il est plus sage de l'utilisert.phone2 <> ''
lors de la vérification des colonnes de chaîne vides.vous pouvez utiliser un caractère générique comme opérateur pour y parvenir:
de cette façon, vous pourriez obtenir tous les phone2 qui ont un préfixe numérique.
la source
Dans mon cas, j'avais une colonne varchar, les deux méthodes de
IS NOT NULL
&!= ''
ne fonctionnaient pas , mais les suivantes ont fonctionné pour moi. Juste mettre ça ici.la source