2012-10-31 57 views
0

我有一些以varchar(10)格式存儲的日期。T-SQL:如何轉換日期的字符串表示

日期是像這樣:

2008-01-06 
2008-01-13 
2008-01-20 
2008-01-27 
2008-02-03 
2008-02-10 
2008-02-17 
2008-02-24 

我想他們在

我試圖DD/MM/yyyy格式(也是DATE數據類型)執行以下操作:

SELECT CONVERT(VARCHAR(max), startWeek, 103) date 
FROM dbo.GoogledataFinal 

爲什麼輸出:

2008-01-06 
2008-01-13 
2008-01-20 
2008-01-27 
2008-02-03 
2008-02-10 
2008-02-17 

如果你可以修復我的代碼,那會很好,但是我更感興趣爲什麼這種行爲正在發生,所以像我5歲那樣解釋可能會有所幫助。

回答

2
SELECT CONVERT(varchar(10), CONVERT(datetime, startWeek), 103) date 
FROM dbo.GoogledataFinal 
+0

你真的應該包括在你的'varchar' – Taryn

+0

@bluefeet做的長度。 –

5

要轉換從varcharvarchar。 style參數甚至沒有用於此。

相反,轉換爲date,然後回到varchar

select convert(varchar(10), cast('2008-01-06' as datetime), 103) 

此打印:

06/01/2008 
+0

非常感謝,我一直討厭在SQL中使用日期...想知道什麼是鑄造和轉換的區別,但這有助於。問題已修復。謝謝。 – Waller

+0

@waller'convert'允許您傳遞格式化掩碼,這對於處理表示日期的字符串很重要。 –

0

試試這個:

SELECT (SUBSTRING (startWeek,9, 2) + '/' + SUBSTRING (startWeek,6, 2) + '/' SUBSTRING (startWeek,1, 4)) AS date 
FROM dbo.GoogledataFinal 
0

您需要將varchar轉換爲日期時間,然後使用所需的格式返回到varchar:

SELECT CONVERT(varchar(10), 
     CONVERT(DATETIME, '2008-02-03', 120) -- Varchar "yyyy-mm-dd" to Datetime 
     , 103) -- Datetime to Varchar "dd/mm/yyyy" 

對於您的情況下,SQL可能是:

SELECT CONVERT(varchar(10), 
     CONVERT(DATETIME, startWeek, 120) 
     , 103) 
FROM dbo.GoogledataFinal