2013-10-10 53 views
0

我有一個varchar中的日期列。我需要將其轉換爲日期時間格式。將varchar轉換爲datetime(包括小時分秒)

My data looks like this in varchar:29-JUL-11 02.44.29.984664000 PM

I want this to be in datetime format like this: 29-JUL-11 02.44.29.984664000 PM

我使用下面的查詢:

select convert (datetime, (convert (float, [KYC_STATUS_CHANGED_DATE])),120) from [dbo].[KYC_Data_31122012] 

但它給以下錯誤:

Error converting data type varchar to float

我在做什麼錯?

+2

爲什麼一個日期列的varchar? –

+2

爲什麼兩個'CONVERT's?你說你有數據保存爲'VARCHAR',並希望它是'DATETIME',但你首先將VARCHAR轉換爲FLOAT,然後將其轉換爲DATETIME,看起來像內部的CONVERT可能太多?此外,您提到的格式只與顯示有關,「DATETIME」是一個保存的時間點,不包含任何格式,只有當您想再次顯示時纔會變得相關。 – DrCopyPaste

+0

'DateTime'甚至精確嗎?從MSDN:'日期時間值四捨五入到.000,.003或.007秒的增量。除非剝離某些亞秒級精度,否則不能解析該字符串。 SQL僅在秒後識別3位數字 – Charleh

回答

1

你可以去整豬,並做了替換/子來得到你的答案

select cast(Replace(SUBSTRING('29-JUL-11 02.44.29.984664000 PM', 
0, len('29-JUL-11 02.44.29.984664000 PM') - 9),'.',':') as datetime) 

醜陋,但它的工程!

+0

它的工作原理。但是,這也削減了AM和PM。我需要那些。 –

+0

那麼,除非你的日期使用12小時制,否則你不必擔心AM/PM。存儲數據與顯示數據不同。 SQL中的數據存儲爲數值(偏離特定的基準日期) - 要顯示AM/PM,您需要使用日期格式化功能。但是,看起來您的日期的小時部分是12小時,因此如果值爲PM(您還需要確保值正確換行),則需要採用日期的最後部分並添加12小時。我要問的問題是,爲什麼你的日期是varchar? – Charleh

+0

我不得不從記事本導入數據。該數據有「(雙引號)作爲文本標識符因此,我不得不把它上傳爲varchar –

0

您的日期格式是錯誤的

正確的格式是一樣的東西

29-JUL-11 02:44:29.985 PM 

和心不是

29-JUL-11 02.44.29.985 PM 
0

如果限制爲毫秒3的精度,你會得到的日期時間數字。

set @str = '29-JUL-11 02.44.29.984664000 PM' 
select cast(Replace(SUbSTRING(@str,0,len(@str)-8) + SUBSTRING(@str,len(@str)-2,len(@str)),'.',':') as datetime) 
+0

同樣的問題。當我嘗試通過列運行它時,它說:從字符串轉換日期和/或時間時轉換失敗。 –

+0

您是否將毫秒修剪爲3個字符? – vinbhai4u

+0

@SadatMainuddin我已更新答案以獲得更合適的答案。如果您有任何問題,請隨時詢問。 – vinbhai4u

1

I have a date column that is in varchar.

在首位錯誤。您應該使用爲數據創建的數據類型。

I need to convert it to datetime format.

如果你使用ASP.NET(我對SQL服務器的使用猜測),那麼你可以使用這個:

var time = Convert.ToDateTime("some_time"); 

然而

My data looks like this in varchar:29-JUL-11 02.44.29.984664000 PM

I want this to be in datetime format like this: 29-JUL-11 02.44.29.984664000 PM

你這是什麼認爲這可能是?我不認爲這是一次。它是時間和一些字符串的組合。

Error converting data type varchar to float

您正在將varchar轉換爲float,float是小數的數據類型。浮動數字之間有浮動小數。所以我認爲你不會將varchar轉換爲datetime,而是編寫一個代碼將其轉換爲float。

而不是在SqlServer選擇,嘗試轉換它在頁面中像我一樣。

29-JUL-11 02.44.29.984664000 PM

在這個東西里,':'在哪裏?服務器不會猜測它有任何時間。您應該嘗試將數據類型轉換爲日期時間!

祝你好運,歡呼!