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

StackOverflow https://stackoverflow.com/questions/639341

Вопрос

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

Например

Выберите ID, DESCRIPTION, TO_CHAR(CHANGE_DATE,'ГГГГ-ММ-ДД ЧЧ24: MI: SS') В КАЧЕСТВЕ FORMATED_DATE Из MY_TABLE;

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

Что -то вроде :ВЫБЕРИТЕ *, (CHANGE_DATE, 'ГГГГ-ММ-ДД ЧЧ24: MI: SS') В КАЧЕСТВЕ FORMATED_DATE Из MY_TABLE;

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

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

Это было полезно?

Решение

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

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

Другие советы

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

ВЫБЕРИТЕ GENERAL.GOREMAL.* ,rownum ,current_date из GENERAL.GOREMAL

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

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

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

SELECT compute_foo() as aColumn, *

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

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

К вашему сведению, следует избегать использования SELECT *, но это уже другой вопрос: -)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top