2009-03-12 10 views
3

J'aimerais pouvoir retourner toutes les colonnes d'une table ou dans la table résultante d'une jointure et être toujours capable de transformer une date en chaîne de nom.Sélectionnez * dans Table et effectuez toujours une fonction sur une seule colonne nommée

Par exemple

Select, DESCRIPTION, TO_CHAR (CHANGE_DATE, 'AAAA-MM-JJ HH24: MI: SS') AS FORMATED_DATE de ma_table;

Tout cela est bien pour ces trois colonnes. Mais, la table aura réellement beaucoup plus de colonnes et peut être jointe sur d'autres tables. J'aimerais pouvoir utiliser un caractère générique pour obtenir toutes les colonnes et être toujours capable d'effectuer la transformation TO_CHAR.

Quelque chose comme: SELECT *, (CHANGE_DATE, 'AAAA-MM-JJ HH24: MI: SS') AS FORMATED_DATE FROM MY_TABLE;

Comme vous l'auriez deviné de TO_CHAR, j'utilise un Oracle donc j'utilise PLSQL. Donc ma question spécifique est: Y a-t-il une syntaxe qui me permettrait de sélectionner toutes les colonnes (via *) et de toujours pouvoir appeler une fonction sur une seule colonne dans ces colonnes.

+0

quelle est la question? – sfossen

+0

Mise à jour de l'entrée pour être spécifique à la question. – Marc

Répondre

4

Le plus proche que vous pourriez faire quelque chose comme:

SELECT 
    MY_TABLE.*, 
    (CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS FORMATED_DATE 
FROM MY_TABLE; 
+0

Comme souligné mon autre réponse, ma syntaxe était presque correcte.L'information manquante pour moi était que je devais joker les colonnes en utilisant les noms qualifiés. Select *, TO_CHAR (...) AS X de ma_table aurait dû être Sélectionnez MA_TABLE. *, TO_CHAR (...) comme X de ma_table – Marc

0

Dans SQL Server ce que vous avez écrit est parfaitement valide, je suppose que cela devrait également fonctionner dans Oracle. Sachez simplement que vous retournerez deux fois la colonne Date dans sa forme originale et une fois dans la forme Formée.

Pour votre information utilisant SELECT * doit probally être évité, mais qui est pour une autre question :-)

1

Ce qui suit est acceptable:

SELECT T1.*, T2.*, x + y as some_Z 

ou peut-être

SELECT compute_foo() as aColumn, * 

Le dernier conservera toujours vos colonnes spéciales au même endroit - au début - quel que soit le nombre de colonnes que le caractère générique apporte.

0

FYI, si vous avez des jointures, sélectionnez * à éviter en particulier il gaspille des ressources de serveur et de réseau particulièrement puisque tous les champs de jointure ont les mêmes informations. Le codage indésirable comme "select *" crée des problèmes de performances qui deviennent très difficiles à résoudre lorsque chaque requête du système est mal écrite. Je sais que dans SQL Server, vous pouvez faire glisser les colonnes sur le navigateur d'objets, ne serait pas surpris si ORacle avait quelque chose de similaire. En outre, select * peut créer beaucoup, beaucoup de bugs plus tard, à mesure que les tables de données changent. C'est une mauvaise pratique de ne pas nommer vos colonnes dans l'ordre spécifique que vous voulez.

2

Plutôt que de vous faire la leçon, ici. Oracle est un peu plus fussier que MSSQL à ce sujet, mais cela a fonctionné pour moi.

SELECT GENERAL.GOREMAL. * , rownum , current_date de GENERAL.GOREMAL

Questions connexes