2017-07-26 8 views
0

Ich bin neu in SQL Server und lernen. Ich habe ein Problem festgestellt. Hier ist das Szenario meines Problems.SQL Server: Szenario mit zwei Tabellen

Es gibt 2 Tabellen, eine ist Addresses und die andere ist Members.

Zuvor habe ich 2 Spalten sammeln Daten für , eine für den Monat und die andere ist für das Jahr.

Aber kürzlich haben wir entschieden, weitere 2 Spalten hinzuzufügen, um dieses Datumsformat (mm/dd/yyyy) zu sammeln, aber anstatt andere Daten einzufügen. Ich möchte die alten Daten von den 2 alten Datumsspalten verwenden, die der Monat und das Jahr sind. Und verwenden Sie die Identifikation ID aus der Members Tabelle und Address Tabelle, die G1, G2, G3 ist. Diese Kennung ID ist der Primärschlüssel.

Ich beschloss, es manuell zu tun, aber ich erkannte, dass wir eine Menge Daten haben und es wird ewig dauern, bis ich fertig bin, wenn ich es eins nach dem anderen mache. Irgendeine Idee, wie werde ich das tun? Ich verwende Microsoft SQL Server Management Studio.

Also im Grunde sollte es so aussehen.

  • Monat Spalte = Juni
  • Jahr Spalte = 2015
  • FullDate Spalte = 2015.06.01

Alle G1 sollte wie dieses

+0

Ich denke, dass Sie die Tabelle aktualisieren und die Datumsspalte so etwas wie 'datefromparts (yearcol, monatecol, 1)' setzen möchten? – ZLK

+0

Angenommen, SQL 2012+ – Xedni

+0

Ja, so etwas. Die Daten sind t oo viele. Bevor ich es manuell einfüge wie in ("1/1/2011"), irgendeine Idee wie ich eine Schleife machen soll. Und benutze die 2 alten Spalten als Referenz für Monat/01/Jahr – Ping

Antwort

0

eine Tabelle wie

gegeben
create table dbo.Addresses 
(
    MonthColumn varchar(30), 
    YearColumn int 
) 

können Sie eine berechnete c hinzufügen Olumn zum Tisch. Da Sie den Monat als Namen haben, wird Ihre beste Wette vermutlich darin bestehen, das Datum einfach als String zu verketten und dann in ein Datum zu konvertieren (beachten Sie, wenn es sich um eine Ganzzahl handelt, können Sie dateadd() verwenden oder, wenn Sie SQL 2012 oder neuere Wieder läuft, datefromparts()

alter table dbo.addresses 
add MonthYear as convert(date, '01 ' + MonthColumn + ' ' + cast(YearColumn as char(4)), 106) -- 106 is the mask for "dd mon yyyy" 

diese auf die Monate angewiesen Standard datenames zu sein. Auch wenn Sie die Monate zu speichern, sind in der Lage, wie ints, das Leben wird leichter. Aber wie es ist, das ist wie ich mich ihm nähern würde

+0

Datum und Monat ist nvarchar. Und wenn ich das "" zu/werde ich es td/mm/jjjj? – Ping

+0

Nein. Das Format, in dem Sie es erhalten müssen, hängt vollständig von der Nummer im letzten Argument der Funktion ab. Die verschiedenen Masken finden Sie hier https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql. Da Sie gezwungen sind, den Namen eines Monats zu verwenden, müssen Sie einen auswählen, der in der Maske "mon" hat. Ich habe 106 willkürlich ausgewählt, aber du hättest auch mit 107 (oder einem anderen mit 'mon 'da drin) gehen können – Xedni

Verwandte Themen