2016-05-11 3 views
1

Я новичок в SQL, и я понимаю, что мне есть чему поучиться. Я посреди конвертирования набора файлов ISAM в таблицы MySQL. Некоторые из таблиц, которые я создаю, содержат сотни столбцов. Чтобы было легче увидеть, правильно ли работают мои преобразования, я хотел бы отображать только подмножество столбцов за раз в моих результатах SELECT.Использование командной строки MySQL, как я могу отображать только столбцы даты или количества (десятичные) в инструкции Select?

Например, мне бы хотелось увидеть только даты или только суммы (т. Е. Десятичные разряды). Это облегчило бы видеть, находятся ли правильные значения в этих полях.

Я работаю из командной строки MySQL, и я бы предпочел не указывать длинный список имен столбцов, если его можно избежать. Есть ли способ заставить мои операторы Select отображать только те столбцы, которые меня интересуют?


(Добавлено 5/12/16) Я использовал вариант синтаксиса Uueerdo, чтобы создать представление:

создать вид dates_view как CONCAT ('выберите', GROUP_CONCAT (column_name), '', 'from', table_schema, '.', table_name, ';') из information_schema.columns, где table_name = 'binders_tbl' и data_type in ('date');

Когда я ввожу select * from dates_view; Я получаю следующее значение:

выберите binder_effectiveDate, binder_expirationDate, binder_submissionCreatedDate, binder_f irstQuotedDate, binder_boundDate, binder_invoicedDate, binder_terminatedDate, binder_ cancelledDate из aesdb.binders_tbl;

Я пробовал, но не смог найти способ использовать этот вид с помощью «select * from binders_tbl;» для отображения только указанных полей даты и их значений.

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


(Добавлено 5/20/16) я нашел своего рода-работы вокруг моей проблемы. Здесь это на случай, если это помогает кому-то еще:

CREATE VIEW DateCols_View AS SELECT Table1_SelectionCriteriaField, Table1_Date1, Table1_Date2, Table1_Date3 FROM Table1;

SELECT * FROM DateCols_View WHERE Таблица1_SelectionCriteriaField (соответствует некоторым критериям);

У меня есть 2 недостатка. Первый заключается в том, что я должен включать в себя все поля критериев выбора, которые я планирую использовать позже. Но с небольшим предусмотрием я могу создать несколько представлений с разными наборами столбцов для разных дисплеев. Это позволит мне отображать только те столбцы, которые я хочу видеть, работая с набором записей. Я планирую создавать отдельные виды для дат, сумм, флагов и т. Д.

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

Надеюсь, когда я узнаю больше о SQL, я найду способ обобщить эту технику (чтобы сделать ее более похожей на скрипт или макрос) и упростить ее дальше.

ответ

0

Нет, вам нужно указать имена столбцов. Синтаксиса для включения динамического поля нет, однако вы могли бы что-то сделать с помощью information_schema (например, ниже), чтобы генерировать запрос для вас.

SELECT CONCAT('SELECT ', GROUP_CONCAT(column_name), ' ' 
,'FROM `', table_schema, '`.`', table_name, '`;' 
FROM information_schema.columns 
WHERE table_schema = 'yourschemaname' 
AND table_name = 'yourtablename' 
AND data_type IN ('timestamp', 'date'[, etc....]) 
; 
+2

«новый для SQL» и «динамический SQL», вероятно, плохо смешиваются. :) – Barmar

+0

Я использовал вариант синтаксиса Uueerdo для создания представления:

create view_view as concat ('select', group_concat (column_name), '', 'from', table_schema, '.', Table_name, ';') from information_schema.columns где table_name = 'binders_tbl' и data_type in ('date'); <\br><\br> Когда я ввожу select * from dates_view; Я получаю это значение: <\br><\br> select binder_effectiveDate, binder_expirationDate, binder_submissionCreatedDate, binder_firstQuotedDate, binder_boundDate, binder_invoicedDate, binder_terminatedDate, binder_cancelledDate from aesdb.binders_tbl; <\br><\br>. (Продолжение в следующем комментарии.) –

+0

@Barmar true, но при этом вручную не печатается потенциально ОЧЕНЬ длинный запрос, это единственный автоматический способ (отличный от какого-то инструмента построения запросов); и вы не можете сильно повредить выбор в информационной схеме. – Uueerdo