7
votes

Comment faire = NULL Travail dans SQLite?

Compte tenu du tableau suivant: xxx

Je veux faire la requête préparée suivante: xxx

travail pour tous les cas. Il ne fonctionne actuellement pas pour le cas où je passe NULL via sqlite3_bind_null . Je me rends compte que la requête pour rechercher réellement des valeurs nulles utilise NULL , mais cela signifierait que je ne peux pas utiliser la requête préparée pour tous les cas. Je devrais effectivement changer la requête en fonction de l'entrée, qui vaingent largement le but de la requête préparée. Comment puis-je faire cela? Merci!


3 commentaires

Comment une recherche d'un utilisateur pour un comédien sans un prénom?


@Mithrandir Ce n'est pas une fonction d'utilisateur confrontée, il est à usage interne. Essentiellement, je passe un pointeur (char *) à la fonction. Si le pointeur est null, j'utilise sqlite3_bind_null mais s'il s'agit de la chaîne "null", j'utilise la fonction String.


Est-ce que cela répond à votre question? SQLite - différence entre IS et = ( est égal à) dans l'endroit où la clause. (Utilisation de JDBC PredyStatement)


4 Réponses :


7
votes

Vous pouvez utiliser le est code> opérateur au lieu de = Code>.

SELECT * FROM Comedians WHERE Middle IS ?


1 commentaires

@Dotje: Dans PostgreSQL, vous pouvez utiliser A n'est pas distinct de B . Légèrement plus cher que a = b .



4
votes

Rien ne correspond à = null code>. Le seul moyen de vérifier que c'est avec est NULL code>.

Vous pouvez faire une variété de choses, mais l'une de l'avant est ... P>

WHERE
  COALESCE(middle, '-') = COALESCE(?, '-')


0 commentaires

2
votes

null code> n'est pas une valeur, mais un attribut d'un champ. Utilisez plutôt

SELECT * FROM Comedians WHERE Middle IS NULL


2 commentaires

Ce n'est pas une solution générique car elle ne me permet pas de tester l'égalité avec autre chose que NULL


@ CHACHAM15: Il n'y a pas de solution générique à l'aide de NULL, car ce n'est pas une valeur. Peut-être devriez-vous utiliser un Valeur Sentinel à la place.



0
votes

Si vous voulez faire correspondre tout sur NULL

SELECT * FROM Comedians WHERE Middle=IfNull(?, 'DUMMY'+Middle)


0 commentaires