Compte tenu du tableau suivant: Je veux faire la requête préparée suivante: p> travail pour tous les cas. Il ne fonctionne actuellement pas pour le cas où je passe NULL via sqlite3_bind_null code>. Je me rends compte que la requête pour rechercher réellement des valeurs nulles utilise NULL code>, 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! P> p>
4 Réponses :
Vous pouvez utiliser le est code> opérateur au lieu de = Code>. SELECT * FROM Comedians WHERE Middle IS ?
@Dotje: Dans PostgreSQL, vous pouvez utiliser A n'est pas distinct de B code>. Légèrement plus cher que a = b code>.
Rien ne correspond à Vous pouvez faire une variété de choses, mais l'une de l'avant est ... P> = null code>. Le seul moyen de vérifier que c'est avec est NULL code>. WHERE
COALESCE(middle, '-') = COALESCE(?, '-')
null code> n'est pas une valeur, mais un attribut d'un champ. Utilisez plutôt SELECT * FROM Comedians WHERE Middle IS NULL
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.
Si vous voulez faire correspondre tout sur NULL
SELECT * FROM Comedians WHERE Middle=IfNull(?, 'DUMMY'+Middle)
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 code> 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)