Выберите * из таблицы и по-прежнему выполнять некоторые функции для одного именованного столбца - PullRequest
3 голосов
/ 12 марта 2009

Я хотел бы иметь возможность возвращать все столбцы в таблице или в итоговой таблице объединения и при этом иметь возможность преобразовывать дату в строку по имени.

Например

Выберите ID, ОПИСАНИЕ, TO_CHAR (CHANGE_DATE, 'ГГГГ-ММ-ДД ЧЧ24: MI: SS') КАК ФОРМАТИРОВАНО_ДАТА ОТ MY_TABLE;

Это все хорошо и хорошо только для этих трех столбцов. Но на самом деле таблица будет иметь гораздо больше столбцов и может быть присоединена к другим таблицам. Я хотел бы иметь возможность использовать подстановочный знак для получения всех столбцов и при этом иметь возможность выполнять преобразование TO_CHAR.

Что-то вроде: SELECT *, (CHANGE_DATE, 'ГГГГ-ММ-ДД ЧЧ24: MI: SS') КАК ФОРМАТИРОВАНО_ДАТА ОТ MY_TABLE;

Как вы уже догадались из TO_CHAR, я использую Oracle, поэтому я использую PLSQL.

Итак, мой конкретный вопрос: существует ли синтаксис, который позволил бы мне выбирать все столбцы (через *) и при этом иметь возможность вызывать функцию для одного столбца в этих столбцах.

Ответы [ 5 ]

4 голосов
/ 12 марта 2009

Самое близкое, что вы можете сделать, это что-то вроде:

SELECT 
     MY_TABLE.*, 
     (CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS FORMATED_DATE 
FROM MY_TABLE;
2 голосов
/ 14 октября 2012

Вместо того, чтобы читать вам лекции, здесь. Oracle немного более суетлив, чем MSSQL, но это сработало для меня.

ВЫБРАТЬ GENERAL.GOREMAL. * , ROWNUM ,текущая дата от GENERAL.GOREMAL

1 голос
/ 12 марта 2009

Допустимо следующее:

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

или, возможно,

SELECT compute_foo() as aColumn, *

Последний из них всегда будет держать ваши специальные столбцы в одном и том же месте - в начале - независимо от того, сколько столбцов содержит шаблон.

0 голосов
/ 12 марта 2009

К вашему сведению, если у вас есть объединения, особенно следует избегать выбора *, поскольку он тратит ресурсы сервера и сети, тем более что все поля объединения имеют одинаковую информацию. Нежелательное кодирование, такое как «select *», создает проблемы с производительностью, которые очень трудно исправить, когда каждый запрос в системе плохо написан. Я знаю, что в SQL Server вы можете перетаскивать столбцы из браузера объектов, не удивлюсь, если у ORacle будет что-то похожее.

Кроме того, select * может создавать множество ошибок при изменении таблиц данных. Это плохая практика, чтобы не называть ваши столбцы в определенном порядке, который вы хотите.

0 голосов
/ 12 марта 2009

В SQL Server то, что вы написали, совершенно правильно, я бы предположил, что оно должно работать и в Oracle. Просто знайте, что вы будете возвращать столбец даты дважды, один раз в оригинальной форме и один раз в форматированной форме.

FYI Использование SELECT *, вероятно, следует избегать, но это для другого вопроса: -)

...