8

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

我究竟做错了什么?

4

5 回答 5

13

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

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

的值41547.5将导致:

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

在您的情况下,样式参数6仅在从字符类型转换为字符类型时才需要。在这种情况下,它不需要并且将被忽略。


注意:浮点值是自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 的比较没有意义,因为它只处理整数而不是浮点数)。

于 2013-10-09T11:43:57.597 回答
1

还有一种更简单的方法可以做到这一点。

select convert(date,cast (date_Column+ 19000000 as nvarchar(10)))
    as date_Column_Formated
  from table_Name
于 2014-12-11T01:48:50.070 回答
1

我刚刚找到了做到这一点的方法。

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

Select convert(datetime, (convert (int, [date_column])), 6) as 'convertedDateTime' from mytable
于 2013-10-09T11:47:16.507 回答
0
SELECT CONVERT(DATETIME,CONVERT(INT,date_column))
于 2013-10-09T12:08:29.177 回答
0

6 格式为:"dd mon yy" 像这样:SELECT convert(datetime, '23 OCT 16', 6) 其他格式会导致你的错误

于 2013-10-09T11:45:07.683 回答