我有一个在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
时出错
我做错了什么?
答案 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)