2013-10-05 106 views
1

我有一個包含兩個日期列的表。但是這些列在varchar中。我需要將它們轉換爲日期格式。將varchar轉換爲sql服務器中的日期格式

的樣本數據是這樣的:

戶口號碼|註冊日期|系統狀態更改日期

01740567715 | 10-JUL-13 | 30-JUL-13 12.53.32.000000000 PM

我希望這兩列都是這樣的:2013年7月10日。

登記日期,我使用此代碼:

Update [dbo].[SysDataV2] 
Set ["REGISTRATION_DATE"]= convert(datetime, (["REGISTRATION_DATE"]), 106) 

但它shwoing結果爲varchar,也顯示錯誤的格式。

對於我使用下面的代碼系統狀態更改日期:

update [dbo].[SysData] 
Set ["KYC_STATUS_CHANGED_DATE"]= REPLACE(CONVERT(datetime,convert(datetime,left(["KYC_STATUS_CHANGED_DATE"],9),103),106),' ' ,'-') 

兩者都轉變爲某種類型的日期格式(不是我預期的格式),但表結構,他們仍顯示爲VARCHAR。

我在這裏做錯了什麼?

+2

表數據類型仍然是varchar。更新會更改存儲的字符串,但它不會奇蹟般地更改數據類型。 –

+0

@AaronBertrand:那麼我必須運行一個選擇查詢並在那裏轉換日期? –

+0

不,您需要在數據正確時更改列的數據類型。 –

回答

3

您需要更改varchar中列的數據類型以將其存儲爲Date。然後,當你選擇它時,你可以用任何你喜歡的方式格式化它。一種方法是創建正確數據類型的新列並轉換數據,然後刪除舊列。確保舊列沒有和外鍵關係,否則您也需要將其轉移。

ALTER TABLE [dbo].[SysData] ADD ConvertedDate DateTime 
UPDATE [dbo].[SysData] SET ConvertedDate = CAST(VarCharDate as DateTime) 
ALTER TABLE [dbo].[SysData] DROP COLUMN VarCharDate 
4

表格的數據類型仍然是varchar。更新只會更改字符串,它不會更改數據類型。你應該做的是(假設所有的日期是有效的,這種格式的100%一致):

UPDATE dbo.SysData SET REGISTRATION_DATE = 
CONVERT(CHAR(10), CONVERT(DATE, REGISTRATION_DATE, 106), 120); 

UPDATE dbo.SysData SET KYC_STATUS_CHANGED_DATE = 
    CONVERT(CHAR(10), CONVERT(DATETIME, LEFT(KYC_STATUS_CHANGED_DATE, 9), 106), 120) 
    + REPLACE(SUBSTRING(KYC_STATUS_CHANGED_DATE, 10, 9), '.',':') 
    + RIGHT(KYC_STATUS_CHANGED_DATE, 2); 

ALTER TABLE dbo.SysData ALTER COLUMN REGISTRATION_DATE DATE; 
ALTER TABLE dbo.SysData ALTER COLUMN KYC_STATUS_CHANGED_DATE DATETIME; 

,然後停止插入區域和潛在問題的字符串。表示日期字符串文字/日期時間應該是:

-- date only 
YYYYMMDD 

-- with time: 
YYYY-MM-DDThh:mm:ss.nnn 

但最好是簡單地確保他們的日期或日期時間值之前,你曾經把他們關到SQL Server。你的應用程序應該能夠做到這一點,而不必轉換爲任何字符串格式。永遠不會永遠將日期或日期時間值存儲爲SQL Server中的字符串。你什麼也得不到,你輸了很多。

相關問題