0

我有一个日期列,它是 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

4 回答 4

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

你认为这可能是什么?我不认为这是一个时间。对我来说,它是时间和一些字符串的组合。

将数据类型 varchar 转换为 float 时出错

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

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

29-JUL-11 02.44.29.984664000 下午

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

祝你好运,加油!

于 2013-10-10T09:55:35.157 回答
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)

丑陋但有效!

于 2013-10-10T09:56:07.893 回答
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)
于 2013-10-10T09:47:24.980 回答
0

你的日期格式错误

正确的格式类似于

29-JUL-11 02:44:29.985 PM

而且不是

29-JUL-11 02.44.29.985 PM
于 2013-10-10T09:28:47.190 回答