Есть ли способ сделать SELECT to_char (t.columnName, Format), т. * FROM Table t, не выбирая columnName дважды? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть таблицы с 50+ столбцами, некоторые из которых являются датами. Для этого столбца даты я должен применить функцию TO_CHAR, чтобы получить определенный формат.

Я все еще хочу выбрать все остальные столбцы.

Следующая строка позволяет мне сделать это, НО columnNameпоявится дважды, что мне кажется вполне нормальным.

select to_char(t.columnName,'dd-mm-yyyy hh24:mi:ss.FF') as columnName, t.* 
FROM Table t;

Есть ли способ сделать SELECT to_char(t.a,format), [* except a]?

1 Ответ

1 голос
/ 25 октября 2019

К сожалению, SQL не позволяет использовать конструкции, подобные исключениям, для определения столбцов в наборе результатов.

Поскольку вы, похоже, используете Oracle (to_char () - это функция, специфичная для Oracle), вы можетеиспользуйте словарь данных для получения списка столбцов и динамического создания оператора SQL:

-- test data
create table test_format(pk number not null primary key, val_num number, val_text varchar2(50 char), val_date date);
insert into test_format(pk, val_num, val_text, val_date) values (1, 2, 'Test row', date '2019-10-25');
commit;

-- get SQL statement
with tab_cols as (
  select
    case when column_name = 'VAL_DATE' then 'to_char(' || column_name || ', ''YYYY-MM-DD hh24:mi:ss'') as ' || column_name
    else column_name
    end as column_name
  from user_tab_cols
  where table_name = 'TEST_FORMAT'
)
select 'select ' || listagg(tc.column_name, ',') within group(order by column_name) || ' from test_format' as sql
from tab_cols tc;
...