我在將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
我在將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
你需要轉換成datetime首先要改變一個字符串以反映一定區域格式。確保你也正確解釋日期時間值;在一些系統上,即10月11日,其他系統將在11月10日。
SELECT CONVERT(CHAR(19), CONVERT(DATETIME, '11/10/11 10:56:58', 3), 120);
最後,使用您char
或varchar
聲明的字符數正確。沒有指定長度是懶惰的,可能會導致問題。請參閱:
的問題:你是一個VARCHAR轉換爲VARCHAR。
如果您使用DATETIME,則您的查詢很好。
SELECT CONVERT(VARCHAR(19), CAST('11/10/11 10:56:58' AS DATETIME), 120);
請參閱fiddle。
請閱讀:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –
@AaronBertrand:感謝您分享您的博客文章,但是這隻會影響'LEN'函數(和這樣)的用法,因此不會影響這個臨時變量的使用? –
此外,這也會遇到同樣的問題 - 如果輸入字符串不明確,則會產生假設,導致問題。 –
這將工作:
SELECT CONVERT(VARCHAR(19),CONVERT(DATETIME,'11/10/11 10:56:58',3),120)
8整秒! –
@AaronBertrand是的,但你的回答有一個解釋 – Lamak
這是因爲風格轉換需要的數據類型設置爲一個'datetime'或'smalldatetime'(或'float','real','money',或'smallmoney',但這不適用於此),並且您提供了一個字符串。另外,根據區域設置,它可能不知道如何轉換'11/10/11' ...是10月11日還是11月10日? – LittleBobbyTables
請注意不要使用'VARCHAR'。如果你沒有看到它下面:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –