Sad*_*din 5 sql sql-server date type-conversion sql-server-2012
我在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)
Run Code Online (Sandbox Code Playgroud)
但是这给出了以下错误:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting
date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
car*_*10m 10
您的日期实际上是一个数值(浮点数或整数),存储在char列中.因此,您需要float先将其转换为数值(在本例中为to ),如:
select convert(datetime, CONVERT(float,date_column))
Run Code Online (Sandbox Code Playgroud)
值41547.5将导致:
`2013-10-02 12:00:00`
Run Code Online (Sandbox Code Playgroud)
在您的情况下6,只有在从char类型转换或转换为char类型时才需要style参数.在这种情况下,它不是必需的,将被忽略.
注意:浮动值是自以后的天数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的比较没有意义,因为那只涉及整数而不是浮点数).
我刚刚找到了做到这一点的方法。
首先我必须将 nvarchar 转换为 int 然后我必须将其转换为日期时间。我使用了以下代码:
Select convert(datetime, (convert (int, [date_column])), 6) as 'convertedDateTime' from mytable
Run Code Online (Sandbox Code Playgroud)