2013-01-21 53 views
1

我在將dd/mm/yy hh:mi:ss格式的字符串轉換爲yyyy-mm-dd hh:mi:ss格式時遇到問題。將dd/mm/yy字符串轉換爲yyyy-mm-dd

我一直在使用CONVERT()如下嘗試:

select CONVERT(VARCHAR, '11/10/11 10:56:58', 120) 

但沒有返回變化:

11/10/11 10:56:58 
+1

這是因爲風格轉換需要的數據類型設置爲一個'datetime'或'smalldatetime'(或'float','real','money',或'smallmoney',但這不適用於此),並且您提供了一個字符串。另外,根據區域設置,它可能不知道如何轉換'11/10/11' ...是10月11日還是11月10日? – LittleBobbyTables

+0

請注意不要使用'VARCHAR'。如果你沒有看到它下面:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

回答

8

你需要轉換成datetime首先要改變一個字符串以反映一定區域格式。確保你也正確解釋日期時間值;在一些系統上,即10月11日,其他系統將在11月10日。

SELECT CONVERT(CHAR(19), CONVERT(DATETIME, '11/10/11 10:56:58', 3), 120); 

最後,使用您charvarchar聲明的字符數正確。沒有指定長度是懶惰的,可能會導致問題。請參閱:

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx

1

的問題:你是一個VARCHAR轉換爲VARCHAR。

如果您使用DATETIME,則您的查詢很好。

SELECT CONVERT(VARCHAR(19), CAST('11/10/11 10:56:58' AS DATETIME), 120); 

請參閱fiddle

+0

請閱讀:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

+0

@AaronBertrand:感謝您分享您的博客文章,但是這隻會影響'LEN'函數(和這樣)的用法,因此不會影響這個臨時變量的使用? –

+0

此外,這也會遇到同樣的問題 - 如果輸入字符串不明確,則會產生假設,導致問題。 –

4

這將工作:

SELECT CONVERT(VARCHAR(19),CONVERT(DATETIME,'11/10/11 10:56:58',3),120) 
+0

8整秒! –

+1

@AaronBertrand是的,但你的回答有一個解釋 – Lamak