如何为varchar“DDMMYYYY HH:MM:SS”转换成DATETIME在SQL Server

问题描述:

我有一个varchar的列,具有这种格式的如何为varchar“DDMMYYYY HH:MM:SS”转换成DATETIME在SQL Server

DDMMYYYY HH:MM:SS 

例如,30072016 23:59:59日期,我需要插入此到另一个表中的DATETIME列中。

我尝试过各种convert选项和所有似乎给这个错误

varchar数据类型到datetime数据类型的转化在外的范围内的值导致

请帮助。在SQL Server

下面是使用CONVERT功能与风格105

DECLARE @datetime varchar(50)='30072016 23:59:59' 
SELECT CONVERT(datetime,stuff(stuff(@datetime,3,0,'-'),6,0,'-'),105) 

一种方式由于您的当前日期时间格式不与任何的本地日期时间格式匹配SQL SERVER,所以我们需要转换为一种格式,SQL服务器可以读取。

SQL SERVER可以读取这种格式DD-MM-YYYY HH:MM:SS。要在day,monthyear之间插入-,请使用STUFF函数。插入后,我们可以将其转换为datetime

+0

这似乎工作。你能解释一下吗?试图学习!而且,它引入了我不需要的毫秒部分..?如何删除? –

+1

阅读有关将字符串放入另一个字符串的'stuff'功能。阅读关于'datetime'的第二部分评论。一切都记录在案。 –

+1

@Rohinibaskaran - 增加了解释..不要担心毫秒,因为它不存在您当前的格式。它将始终为零。 –

一种方法2012+将是单独做的日期和时间转换:

select (datefromparts(substring(col, 5, 4) + 0, substring(col, 3, 2) + 0, left(col, 2)) + 
     convert(time, right(col, 8)) 
     ) as dt_value 

,其实这可以在早期版本的工作,你只需要使用不同的功能,因为datefromparts()不支持的。

这与SQL Server本机可解析的任何格式都不匹配。

因此,我的建议是:

  • 使用字符串操作(LEFTSUBSTRING)将其转换成一个格式原生SQL服务器解析的,例如,YYYY-MM-DD HH:MM:SS(样式120 ,“ODBC canonical”),

  • 然后使用CONVERT将其转换为日期时间。