2016-05-11 4 views
1

Ich bin neu in SQL und mir ist klar, dass ich viel zu lernen habe. Ich bin dabei, eine Reihe von ISAM-Dateien in MySQL-Tabellen zu konvertieren. Einige der Tabellen, die ich erstelle, haben Hunderte von Spalten. Um zu erkennen, ob meine Conversions ordnungsgemäß funktionieren, möchte ich in meinen SELECT-Ergebnissen jeweils nur eine Teilmenge von Spalten anzeigen.Wie kann ich mit der MySQL-Befehlszeile nur Datums- oder Betragsspalten (Dezimal) in einer Select-Anweisung anzeigen?

Zum Beispiel möchte ich nur Daten oder nur Beträge (d. H. Dezimalzahlen) sehen. Dies würde es einfacher machen zu sehen, ob die richtigen Werte in diesen Feldern sind.

Ich arbeite von der MySQL-Befehlszeile und ich würde lieber nicht eine lange Liste von Spaltennamen angeben, wenn es vermieden werden kann. Gibt es eine Möglichkeit, meine Select-Anweisungen nur die Spalten anzeigen zu lassen, die mich interessieren?


(Added 5/12/16) habe ich eine Variante von Uueerdo Syntax eine Ansicht zu erstellen:

Ansicht dates_view als Concat erstellen ('select', Group_concat (column_name), '', 'from', table_schema, '.', table_name, ';') aus information_schema.columns wobei table_name = 'binders_tbl' und data_type in ('date');

Wenn ich wähle * aus dates_view; Ich erhalte diesen Wert:

wählen binder_effectiveDate, binder_expirationDate, binder_submissionCreatedDate, binder_f irstQuotedDate, binder_boundDate, binder_invoicedDate, binder_terminatedDate, binder_ cancelledDate von aesdb.binders_tbl;

Ich habe versucht, aber konnte keine Möglichkeit finden, diese Ansicht mit "Select * from binders_tbl;" um nur die obigen Datumsfelder und ihre Werte anzuzeigen.

Wenn mich jemand zu einer "Join" - oder "Subquery" -Lösung führen kann, würde ich das schätzen. Vorerst werde ich bei der Auflistung aller einzelnen Spalten nach Bedarf bleiben. Außerdem werde ich mehr grundlegendes und mittleres SQL lernen. Danke an alle, die geantwortet haben.


(Hinzugefügt 5/20/16) ich eine Art-of Work-around zu meinem Problem gefunden. Hier ist es für den Fall, dass es jemand anderen hilft:

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

SELECT * FROM DateCols_View WHERE Table1_SelectionCriteriaField (entspricht einigen Kriterien);

Mein Workaround hat 2 Nachteile. Die erste ist, dass ich alle Auswahlkriterienfelder, die ich später verwenden möchte, einbeziehen muss. Aber mit ein wenig Voraussicht kann ich mehrere Ansichten mit verschiedenen Spalten für verschiedene Anzeigen erstellen. Dadurch kann ich nur die Spalten anzeigen, die ich beim Arbeiten mit einer Reihe von Datensätzen sehen möchte. Ich plane separate Ansichten für Daten zu erstellen, Beträge, Fahnen usw.

Der andere Nachteil ist, dass ich einen eigenen Satz von Ansichten für jede Tabelle erstellen oder beitreten Kombination Ich plane, mit zu arbeiten.

Ich hoffe, wenn ich mehr über SQL lerne, werde ich einen Weg finden, diese Technik zu verallgemeinern (um sie mehr wie ein Skript oder Makro zu machen) und sie weiter zu vereinfachen.

Antwort

0

Nein, Sie müssen Spaltennamen angeben. Es gibt keine Syntax für die Einbeziehung dynamischer Felder, jedoch könnten Sie mit information_schema (wie unten) etwas ausarbeiten, um eine Abfrage zu generieren, die Sie verwenden können.

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

"Neu zu SQL" und "Dynamic SQL" wahrscheinlich nicht gut mischen. :) – Barmar

+0

Ich habe eine Variante von Uueerdos Syntax verwendet, um eine Ansicht zu erstellen:

create Ansicht dates_view als concat ('select', group_concat (column_name), '', 'from', table_schema, '.', Table_name, ';') from information_schema.columns wo tabellenname = 'binders_tbl' und data_type in ('date'); <\br><\br> Wenn ich wähle * aus dates_view; Ich bekomme diesen Wert: <\br><\br> Wählen Sie binder_effectiveDate, binder_expirationDate, binder_submissionCreatedDate, binder_firstQuotedDate, binder_boundDate, binder_invoicedDate, binder_terminedDate, binder_cancelledDate von aesdb.binders_tbl; <\br><\br>. (Fortsetzung im nächsten Kommentar.) –

+0

@Barmar true, aber kurz vor der manuellen Eingabe einer möglicherweise sehr langen Abfrage, dies ist die einzige automatische Möglichkeit (anders als irgendeine Art von Abfrage-Erstellungstool); und Sie können nicht wirklich viel mit einer Auswahl im Informationsschema verletzen. – Uueerdo