2011-08-31 40 views
1

我有一個日期時間列,我需要改變成一個varchar列。如何更改使用ALTER COLUMN將日期時間列轉換爲varchar時生成的日期格式?

用下面的語句,產生的字符串具有以下格式:「2010年1月18日17:28」

ALTER TABLE Thinger 
ALTER COLUMN LastUpdateDate varchar(16) NOT NULL 

我想製作有一個YYYYMMDD格式(給20100118),而不是字符串。有沒有辦法做到這一點?

感謝

+2

你爲什麼要改變表這種方式?他們真的不是約會嗎? –

+0

你如何填充這張表 - 使用存儲過程?然後將該值作爲日期時間並在過程中進行轉換。 – lcv77

+0

日期是從一組文件中導入的。這些文件以這種方式列出日期,以便它們可以只存儲年份和月份,並通過將這些數字設置爲零來使日期不確定(20110800)。我想這意味着他們不是_always_日期,這是造成問題。 –

回答

4

壞,壞主意 ...永遠不會存儲在VARCHAR列的日期,現在你會得到垃圾在那裏以不同的格式 也因如此VARCHAR(16)當你想年月日?

,如果你想輸出爲不同的格式做在表示層或使用轉換

SELECT CONVERT(CHAR(8),GETDATE(),112) 

現在,如果你真的想這樣做,你說什麼,你想要做

運行你的腳本,然後做

UPDATE Table 
SET LastUpdateDate = CONVERT(CHAR(8),(CONVERT(DATETIME,CONVERT(varchar,LastUpdateDate))),112) 

但再次.. 很壞很壞的壞主意

同樣的SQL Server的下一個版本將格式化輕鬆不少見:Format function in SQL Server Denali CTP3

+0

我同意這是一個壞主意,但我正在使用的文件中的日期以這種方式來到我身上。最初,我選擇將日期存儲爲日期時間,但我們收到的日期字符串往往是無效的日期。他們會有像2月30日這樣的日子和其他的廢話。或者他們會缺少(或額外)字符。這就是爲什麼我使用varchar(16) - 即使廢話日期錯誤,我仍然需要存儲我得到的內容,直到它們得到糾正。此外,日期有時被寫入19750400表明只有年和月是已知的,並且日期時間不能這樣做 –

+0

謝謝,這完成了這項工作。 –

+1

然後你需要去打敗誰給你無效的日期。最好用一個大而重的物體。與此同時,我會有一個'翻譯'或'暫存'表格/列,在那裏你存儲無效日期,直到他們可以工作 - 實際上不會將無效日期存儲在主表/鍵中。並找出缺失時間的日期的業務規則 - 使用午夜或其他合理的時間。不要只是使用無效的日期,否則它會變得慣性...... –

2

試試這個腳本:

ALTER TABLE Thinger ADD LastUpdateDateText VARCHAR(16) NOT NULL 
GO 

UPDATE Thinger SET LastUpdateDateText = CONVERT(VARCHAR(8), LastUpdateDate, 112) 
GO 

ALTER TABLE Thinger DROP COLUMN LastUpdateDate 
GO 

sp_RENAME 'Thinger.LastUpdateDateText' , 'LastUpdateDate', 'COLUMN' 
GO 
相關問題