2010-10-15 2 views
-2

En utilisant PostgreSQL 8.1.11, existe-t-il un moyen de sélectionner un ensemble de colonnes dont le nom commence par le même préfixe.Comment sélectionner les colonnes dont le nom commence par le même préfixe?

Supposons que nous ayons des colonnes: PREFIX_col1, PREFIX_col2, ...

Est-il possible de faire une demande comme:

SELECT 'PREFIX_*' FROM mytable; 

Ce qui bien sûr ne fonctionne pas.

+0

Vous pourriez construire une fonction pour construire la requête, et alors utilisez EXECUTE – Pointy

+0

Bonne idée, je vais explorer de cette façon. – Toto

+0

*** 8,1 ***? Vraiment? Vous devriez mettre à jour ** maintenant **. Cette version a longtemps été supprimée. Btw: votre structure de table semble indiquer que vos tables ne sont pas normalisées. Vous pourriez envisager une refonte. –

Répondre

1

Pour moi, ça ressemble the syntax description of PostgreSQL 8.x's SELECT statement ne permet pas. Une liste SELECT doit être une expression ou une liste d'expressions, et la syntaxe pour ne semble pas autoriser les noms de colonnes partielles génériques.

Partagez et appréciez.

+0

Merci pour la réponse, il semble que vous avez raison. Dommage pour moi :-( – Toto

2

Vous allez devoir construire la requête avec une requête et utiliser EXECUTE. C'est un peu plus facile w/8.3+. Voici une requête qui se déroulera sur 8.1 et tire toutes les colonnes commençant par r% de la table film

$$ 
DECLARE 
    qry TEXT; 
BEGIN 
    SELECT 'SELECT ' || substr(cols, 2, length(cols) - 2) || 
     ' FROM film' INTO qry 
    FROM (
     SELECT array(
      SELECT quote_ident(column_name::text) 
      FROM information_schema.columns 
      WHERE table_schema = 'public' 
       AND table_name = 'film' 
       AND column_name LIKE 'r%' 
      ORDER BY ordinal_position 
     )::text cols 
     -- CAST text so we can just strip off {}s and have column list 
    ) sub; 

    EXECUTE qry; 
END; 
$$ 
0

Utilisez ceci:

select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'table_name' and c.COLUMN_NAME like '%pattern%'; 
+1

S'il vous plaît comprendre que les réponses "code seulement" sont déconseillées - plutôt ajouter un peu d'explication.Et lire sur * formatage * votre entrée! – GhostCat

Questions connexes