将数值转换为日期时间

时间:2013-10-09 11:39:23

标签: sql sql-server date sql-server-2012 type-conversion

我在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.

我做错了什么?

5 个答案:

答案 0 :(得分:8)

您的日期实际上是一个存储在char列中的数值(浮点数或整数)。因此,您需要先将其转换为数值(在本例中为float),如:

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

41547.5将导致:

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

样式参数,在您的情况下6仅在从char类型转换或转换为char类型时是必需的。在这种情况下,它不是必需的,将被忽略。


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

e.g。 select convert(datetime, CONVERT(float,9.0)) => 1900-01-10 00:00:00;与select dateadd(day,9.0,'1900-01-01')相同。

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

e.g。 select convert(datetime, CONVERT(float,.5)) => 1900-01-01 12:00:00。 (这里我们与dateadd的比较没有意义,因为那只涉及整数而不是浮点数。)

答案 1 :(得分:1)

我刚刚找到了这样做的方法。

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

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

答案 2 :(得分:0)

6格式是:“dd mon yy” 像这样:SELECT转换(datetime,'23 OCT 16',6) 其他格式会导致您的错误

答案 3 :(得分:0)

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

答案 4 :(得分:0)

还有一种更简单的方法。

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