Sélectionner des colonnes, avec en particulier les noms de colonne dans PostgreSQL
Je veux écrire une requête simple pour sélectionner un nombre de colonnes dans PostgreSQL. Cependant, je continue à recevoir des erreurs - j'ai essayé quelques options, mais ils n'ont pas de travail pour moi. Pour le moment, j'obtiens l'erreur suivante:
org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de
"colonne"
Pour obtenir les colonnes avec des valeurs que j'essaie de la followig:
select * from weather_data where column like '%2010%'
Des idées?
- Êtes-vous essayer de retourner des colonnes qui contiennent 2010 ou êtes-vous essayer de retourner les lignes où la colonne a de la valeur à 2010 inclus? Vous ne pouvez pas sélectionner une liste de colonnes comme ceci (bien, peut-être avec le sql dynamique vous pourriez)...
- Avez-vous une colonne de colonne nommée?
- Eh bien, je suis en train de colonnes de retour avec 2010 dans le cadre de leur nom. Par exemple il y a une colonne avec le nom de: m01y2010 - donc, je veux que, ainsi que l' : m02y2010 ... etc. - et les valeurs stockées dans les colonnes. Donc, il n'y a pas moyen de sélectionner une liste de colonnes avec 2010 en leur nom!?
- non - il n'y a pas de colonne appelée colonne
- Le SQL dynamique est probablement votre seule option.
- Avec les noms de colonnes comme ça, vous pourriez avoir un mauvais modèle de données. J'ai entendu de bonnes choses sur le livre, Conception de Base de données pour de Simples Mortels.
- Étroitement liés à la question: stackoverflow.com/questions/8052440/...
Vous devez vous connecter pour publier un commentaire.
column
est un mot réservé. Vous ne pouvez pas l'utiliser comme identificateur, sauf si vous double-quote-il. Comme:"column"
.Ne signifie pas que vous devriez, cependant. Il suffit de ne pas utiliser des mots réservés comme des identificateurs. Jamais.
À ...
.. vous pouvez utiliser cette fonction pour construire la commande SQL dynamique à partir du catalogue du système tableau pg_attribute:
Appel:
Retourne quelque chose comme:
Vous ne pouvez pas faire cette dynamique, parce que le type de retour est inconnu jusqu'à ce que nous avons fait construire la requête.
Ainsi, vous obtenez la liste des colonnes dans une table spécifique (vous pouvez éventuellement ajouter un schéma si nécessaire):
SQL Violon Démo
Vous pouvez alors utiliser cette requête pour créer une instruction sql dynamique pour renvoyer vos résultats.
Tentatives d'utilisation de dynamique des structures comme ceci indique généralement que vous devriez être en utilisant des formats de données comme
hstore
,json
,xml
, etc qui sont amenible d'accès dynamique.Vous peut obtenir une dynamique de la colonne de la liste par la création du SQL à la volée dans votre application. Vous pouvez interroger l'
INFORMATION_SCHEMA
pour obtenir des informations sur les colonnes d'une table et de construire la requête.Il est possible de le faire en PL/PgSQL et exécuter la requête générée avec
EXECUTE
mais vous la trouverez un peu difficile de travailler avec le résultatRECORD
, que vous devez obtenir et de décoder composite de n-uplets, vous ne pouvez pas développer le jeu de résultats dans un normal de la colonne de la liste. Observer:Sur tout ce que vous pouvez faire est d'obtenir les premières enregistrer et de le décoder dans le client. Vous ne pouvez pas l'indice de SQL, vous ne pouvez pas convertir à quoi que ce soit d'autre, etc. La plupart des Api client de ne pas fournir des installations pour l'analyse des représentations du texte de l'anonymat des dossiers de sorte que vous aurez probablement besoin d'écrire vous-même.
Donc: vous peut retour dynamique des enregistrements à partir de PL/PgSQL sans connaître leur type de résultat, c'est juste pas particulièrement utile, et il est difficile à gérer sur le côté client. Vous voulez vraiment vous suffit d'utiliser le client pour générer des requêtes dans la première place.
record
ousetof record
sans colonne-définition-liste si vous êtes heureux avec un non développés anonyme record dans l'ensemble résultat. Voir mise à jour de réponse.Vous ne pouvez pas rechercher toutes les colonnes comme ça. Vous devez spécifier une colonne spécifique.
Par exemple,
ou mieux encore si c'est une date, spécifier une plage de dates:
Trouvé ce ici :
Le résultat est une requête SQL de type SELECT, vous avez juste à exécuter d'autres.
Il correspond à mes besoins puisque je redirige le résultat dans le shell comme ceci :
Que me renvoie le résultat mis en forme, mais il ne fonctionne que dans le shell.
Espérons que cela aide quelqu'un un jour.