2017-07-26 52 views
0

我是新來的SQL Server和學習。我遇到了一個問題。這是我的問題的場景。SQL Server:有兩個表的場景

有兩個表格,一個是Addresses,另一個是Members

以前,我有2列收集日期Addresses,一個月和一年。

但是最近我們決定增加另外2列來收集這個日期格式(mm/dd/yyyy),但不是插入另一個數據。我想使用2箇舊日期列中的舊月數據,即年月。並使用Members表中的ID和G1,G2,G3中的Address表。這個標識ID是主鍵。

我決定手動完成它,但我意識到我們得到了大量的數據,如果我一個一個地完成,它會花費很長時間才能完成。任何想法我將如何做到這一點?我正在使用Microsoft SQL Server Management Studio。

所以基本上它應該看起來像這樣。

  • 月份列=月
  • Year列= 2015
  • FullDate列= 2015年6月1日

所有G1應該是這樣的

+0

我想你想更新表並將日期列設置爲'datefromparts(yearcol,monthcol,1)'? – ZLK

+0

假設SQL 2012+ – Xedni

+0

是的,類似的東西。數據是t很多。在我像插入(「1/1/2011」)手動插入它之前,我想怎麼做一個循環。並使用2箇舊列作爲月/ 01 /年的參考 – Ping

回答

0

給定一個表像

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

你可以添加一個計算的c在桌子旁邊。既然你有一個月作爲一個名字,你最好的選擇可能是把日期連接成一個字符串,然後把它轉換成一個日期(注意,如果它是一個整數,你可以使用dateadd()或者,重新運行SQL 2012年或更近,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" 

這不依賴於個月是標準datenames。同樣,如果你能夠存儲數月爲int,生活變得更輕鬆。但是按照,這是

+0

日期和月份是nvarchar。如果我將這個''替換成/ dd/mm/yyyy? – Ping

+0

不需要。您必須獲取的格式完全取決於函數的最後一個參數中的數字。不同的掩碼可以在這裏找到https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql。由於你被迫使用一個月的名字,你必須選擇一個在面具上有「mon」的名字。我任意挑選了106個,但你也可以用107個(或者帶有'mon'的另一個) – Xedni