2009-03-12 4 views
3

Я хотел бы иметь возможность возвращать все столбцы в таблице или в результирующей таблице соединения и по-прежнему иметь возможность преобразовать дату в строку по имени.Выберите * из таблицы и по-прежнему выполняйте некоторую функцию на одном именованном столбце

Например

Выберите идентификатор ОПИСАНИЕ, TO_CHAR (CHANGE_DATE, 'ГГГГ-ММ-ДД HH24: MI: SS') КАК FORMATED_DATE ОТ MY_TABLE;

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

Нечто вроде: SELECT *, (CHANGE_DATE, 'YYYY-MM-DD HH24: MI: SS') AS FORMATED_DATE FROM MY_TABLE;

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

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

+0

чем вопрос? – sfossen

+0

Обновлена ​​запись для конкретного вопроса. – Marc

ответ

4

Ближайшими вы могли бы сделать что-то вроде:

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

Как указывал мой другой ответ, мой синтаксис был почти прав.Недостающая часть информации для меня заключалась в том, что мне приходилось подбирать столбцы с использованием квалифицированных имен. Select *, TO_CHAR (...) AS X от my_table должны были Выберите MY_TABLE. *, TO_CHAR (...) в X ОТ MY_TABLE – Marc

0

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

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

1

Следующие приемлемо:

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

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

SELECT compute_foo() as aColumn, * 

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

0

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

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

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^