SQLite sélectionnez où vide?


125

Dans SQLite, comment puis-je sélectionner des enregistrements où some_column est vide?
Vide compte à la fois comme NULL et "".


8
Cela aide si vous formulez des questions comme des questions. Que sommes-nous censés répondre?
javawizard

Réponses:


288

Il existe plusieurs façons, comme:

where some_column is null or some_column = ''

ou

where ifnull(some_column, '') = ''

ou

where coalesce(some_column, '') = ''

de

where ifnull(length(some_column), 0) = 0

Quels sont les avantages de chaque solution?
Pacerier

1
@Pacerier: Il peut y avoir des différences de performances, mais à part ça, c'est juste une question de style.
Guffa

3
@Guffa Je veux dire bien sûr la performance .. C'est une base de données, n'est-ce pas? l'optimisation est importante dans dbs. un peu de gain de performance, c'est beaucoup
Pacerier

4
length (some_column) doit être évité, car cela peut calculer la longueur à la volée - SQLite actuel AFAIK le fait pour les colonnes avec une affinité de texte. En dehors de cela, vous êtes à la merci de l'optimiseur - même si je m'attendrais à ce qu'ils soient identiques. Vous pouvez vérifier cela en utilisant EXPLAIN.
peterchen

@peterchen: Oui, cela dépend de ce que fait l'optimiseur. J'ai inclus l' lengthexemple car il pourrait en fait être plus rapide dans certaines situations, car comparer des nombres est plus simple que comparer des chaînes. Si les performances sont un problème, vous devez bien sûr vérifier ce qu'elles font.
Guffa

27

Il semble que vous pouvez simplement faire:

SELECT * FROM your_table WHERE some_column IS NULL OR some_column = '';

Cas de test:

CREATE TABLE your_table (id int, some_column varchar(10));

INSERT INTO your_table VALUES (1, NULL);
INSERT INTO your_table VALUES (2, '');
INSERT INTO your_table VALUES (3, 'test');
INSERT INTO your_table VALUES (4, 'another test');
INSERT INTO your_table VALUES (5, NULL);

Résultat:

SELECT id FROM your_table WHERE some_column IS NULL OR some_column = '';

id        
----------
1         
2         
5    

1

Peut-être que tu veux dire

select x
from some_table
where some_column is null or some_column = ''

mais je ne peux pas le dire puisque vous n'avez pas vraiment posé de question.


0

Vous pouvez le faire avec les éléments suivants:

int counter = 0;
String sql = "SELECT projectName,Owner " + "FROM Project WHERE Owner= ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, "");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
    counter++;
}
System.out.println(counter);

Cela vous donnera le nombre de lignes où la valeur de la colonne est nulle ou vide.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.