将varchar转换为datetime,包括小时分钟和秒

时间:2013-10-10 09:15:42

标签: sql sql-server datetime

我有一个在varchar中的日期列。我需要将其转换为日期时间格式。

  

我的数据在varchar中看起来像这样:29-JUL-11 02.44.29.984664000 PM

     

我希望这是这样的日期时间格式:29-JUL-11 02.44.29.984664000 PM

我正在使用以下查询:

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

但是它给出了以下错误:

  

将数据类型varchar转换为float

时出错

我做错了什么?

4 个答案:

答案 0 :(得分:1)

  

我有一个在varchar中的日期列。

首先是错误的。您应该使用为数据创建的数据类型。

  

我需要将其转换为日期时间格式。

如果您正在使用ASP.NET(我猜测是使用sql-server),那么您可以使用它:

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

然而

  

我的数据在varchar中看起来像这样:29-JUL-11 02.44.29.984664000 PM

     

我希望这是这样的日期时间格式:29-JUL-11 02.44.29.984664000 PM

您认为这可能是什么?我不认为这是一个时间。它是Time和一些String的组合。

  

将数据类型varchar转换为float

时出错

您正在将varchar转换为float,float是小数的数据类型。浮点数在它们的数字之间有一个浮动小数。所以我认为你没有将varchar转换为datetime,而是编写一个代码将其转换为float。

而不是在SqlServer中选择,尝试像我一样在页面中转换它。

  

29-JUL-11 02.44.29.984664000 PM

在这件事中,':'在哪里?服务器不会猜测它有任何时间。您应该首先尝试将数据类型转换为datetime!

祝你好运,欢呼!

答案 1 :(得分: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)

丑陋但它有效!

答案 2 :(得分:0)

您的日期格式错误

正确的格式类似于

29-JUL-11 02:44:29.985 PM

并且不是

29-JUL-11 02.44.29.985 PM

答案 3 :(得分: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)