2009-04-10 7 views
43

J'utilise Postgres et je suis en train d'écrire une requête comme ceci:Postgres - Comment vérifier un tableau vide

select count(*) from table where datasets = ARRAY[] 

-à-dire je veux savoir combien de lignes ont un tableau vide pour une certaines colonnes, mais postgres pas comme ça:

select count(*) from super_eds where datasets = ARRAY[]; 
ERROR: syntax error at or near "]" 
LINE 1: select count(*) from super_eds where datasets = ARRAY[]; 
                  ^
+0

... si datasets = NULL représente ARRAY [], les réponses sont OK ... A propos de "ARRAY []", il s'agit d'une erreur de syntaxe (!): Comme depesz a répondu, un tableau vide nécessite aussi le type de données, SQL de Rory script besoin de correction, est "ARRAY [] :: entier". –

Répondre

60

La syntaxe doit être:

SELECT 
    COUNT(*) 
FROM 
    table 
WHERE 
    datasets = '{}' 

Vous utilisez des guillemets, plus accolades t o afficher les littéraux de tableau.

0
SELECT COUNT(*) 
FROM table 
WHERE datasets = ARRAY(SELECT 1 WHERE FALSE) 
+0

Bien que cela puisse fonctionner, il semble juste un peu brouillon. – Rory

14

Vous pouvez utiliser le fait que array_upper et array_lower fonctions, sur des tableaux vides retour null, vous pouvez:

select count(*) from table where array_upper(datasets, 1) is null; 
+0

... ok si datasets = NULL représente ARRAY [], mais à propos de "ARRAY []", c'est une erreur de syntaxe (!). Comment créer un tableau vide ?? –

+0

c'est une erreur seulement parce qu'il ne peut pas dire quel type de données est hors tableau. ajouter un cast: sélectionnez ARRAY [] :: int4 []; –

2
 
Solution Query: 
select * from table where array_column = ARRAY[NULL]::array_datatype; 
 
Example: 

table_emp:

id (int)| name (character varying) | (employee_id) (uuid[]) 
1  | john doe     | {4f1fabcd-aaaa-bbbb-cccc-f701cebfabcd, 2345a3e3-xxxx-yyyy-zzzz-f69d6e2edddd } 
2  | jane doe     | {NULL} 


select * from tab_emp where employee_id = ARRAY[NULL]::uuid[]; 

    ------- 
2  | jane doe     | {NULL} 
Questions connexes