2013-10-09 108 views
3

我在SQL Server 2012中工作。数据集中的我的日期列如下所示:41547。该栏位于nvarchar (255)。我想将它转换为这样的内容:yyyy-mm-dd hh:mm:ss(例如:2013-09-14 12:23:23.98933090)。但我不能这样做。我使用下面的代码:将数值转换为日期时间

select convert(datetime, date_column, 6) 

但是,这是给下面的错误:

Msg 241, Level 16, State 1, Line 1 Conversion failed when converting 
date and/or time from character string. 

我在做什么错?

回答

1

我刚刚发现这样做的方法。

首先,我必须将nvarchar转换为int,然后我必须将它转换为日期时间。我用下面的代码:

Select convert(datetime, (convert (int, [date_column])), 6) as 'convertedDateTime' from mytable 
6

你的日期实际上是一个数值(浮点数或整数),存储在字符列中。所以,你需要将其转换到一个数值(在这种情况下,float),如:

select convert(datetime, CONVERT(float,date_column)) 

41547.5值将导致:

`2013-10-02 12:00:00` 

风格的说法,您的情况6只有在从char类型转换为char类型时才是必需的。在这种情况下,它不是必需的,将被忽略。


注意:浮点值是自1900-01-01以来的天数。

例如select convert(datetime, CONVERT(float,9.0)) =>1900-01-10 00:00:00;与select dateadd(day,9.0,'1900-01-01')一样。

该数字的小数部分也等于天;所以0.5是半天/ 12小时。

例如select convert(datetime, CONVERT(float,.5)) =>1900-01-01 12:00:00。 (这里我们和dateadd的比较没有意义,因为它只处理整数而不是浮点数)。

+0

谢谢。不过,我将日期列转换为int而不是flot。我认为这会给你像你一样的价值。 –

+1

'int'只会给你几天,而不是几小时和几分钟...... – cars10m

+0

谢谢:)我只需要几天。不是几小时和几分钟。 –

0

6格式为:“DD周一YY” 像这样:选择转换(日期时间,'23 10月16' 日,6) 其他格式将导致你的错误

0
SELECT CONVERT(DATETIME,CONVERT(INT,date_column)) 
0

还有就是要做到这一点还有一个更简单的方法。

select convert(date,cast (date_Column+ 19000000 as nvarchar(10))) 
    as date_Column_Formated 
    from table_Name 
相关问题