我在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.
我做错了什么?
答案 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