2013-04-08 72 views
1

我有數據如下圖所示轉換爲varchar 2007-12-19-11.57.1​​7.366731到datetime數據類型

2007-12-19-11.57.17.366731 

和數據類型是varchar(26)

我只想數據類型更改爲datetime

我嘗試了所有的語法,但沒有用,我越來越

varchar數據類型爲datetime數據類型的轉換導致超出範圍的值。

這裏是我想

SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120) 

感謝

回答

0

您正在試圖提供一個不可接受datetime格式樣本。這是正確的格式:

SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120) 
1

那麼,首先,您需要添加一些字符串魔法來將數據轉換爲DATETIME的加密格式。而且你還需要使用更少的毫秒(對於DATETIME,你有3位數字),在SQL Server 2008中,你可以使用DATETIME2。請嘗試以下操作:

DECLARE @Value VARCHAR(26) 
SET @Value = '2007-12-19-11.57.17.366731' 

SELECT CONVERT(DATETIME,LEFT(@Value,10) + ' ' + 
         REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' + 
         SUBSTRING(@Value,21,3), 120) ValueAsDatetime, 
     CONVERT(DATETIME2,LEFT(@Value,10) + ' ' + 
         REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' + 
         RIGHT(@Value,6), 120) ValueAsDatetime2 

結果:

╔═════════════════════════╦═════════════════════════════╗ 
║  ValueAsDatetime  ║  ValueAsDatetime2  ║ 
╠═════════════════════════╬═════════════════════════════╣ 
║ 2007-12-19 11:57:17.367 ║ 2007-12-19 11:57:17.3667310 ║ 
╚═════════════════════════╩═════════════════════════════╝ 
+0

太謝謝你了它的工作原理,但出10萬,我只得到了75000條記錄。我希望少數記錄的格式不是相同的。在75000條記錄之後,日期可能會更奇怪。所以剩餘的記錄沒有填充。我希望我認爲寫入大小寫聲明無論記錄是否以不同格式使其成爲NULL並傳遞剩餘的75000條記錄。 – user2259252 2013-04-08 21:29:50

相關問題