使用两个varchar列时如何在sql server中转换为datetime

时间:2017-03-20 14:42:19

标签: sql-server datetime

我无法将两列转换为一个日期时间字段。列的格式如下:DateColumn =' 20150130' TimeColumn采用以下格式' 81244'或者' 113404'没有给出前导零。到目前为止,我有以下格式,对我来说看起来像一个正确的日期时间格式。但是,无论出于何种原因,我都无法将其投射到日期时间。我收到以下错误"从字符串转换日期和/或时间时转换失败。"。任何帮助将不胜感激。

    SELECT CAST(LEFT(DATECOLUMN, 4) +'-' + LEFT(RIGHT(DATECOLUMN, 4), 2) + '-' +  LEFT(RIGHT(DATECOLUMN, 2), 2) + ' ' + 
   LEFT(RIGHT('000000' + CAST(TIMECOLUMN AS varchar), 6),2) + ':' +
   LEFT(RIGHT(RIGHT('000000' + CAST(TIMECOLUMN AS varchar), 6),4), 2) + ':' +
   RIGHT(RIGHT('000000' + CAST(TIMECOLUMN AS varchar), 6), 2) + ':000000' AS DATETIME) 
   FROM TABLE1

2 个答案:

答案 0 :(得分:0)

这适用于您的示例数据。

declare @date varchar(10) = '20150130'
    , @Time varchar(10) = '81244'


select convert(datetime, stuff(stuff(@date, 5, 0, '-'), 8, 0, '-') + ' ' + stuff(stuff(right('0000' + @Time, 6), 3, 0,  ':'), 6, 0, '.'))

答案 1 :(得分:0)

这种表述确实存在许多问题。这是一个包含变量的工作语句,您可以将它们更改为使用列名:

declare @DATECOLUMN varchar(8), @TIMECOLUMN varchar(6);
select @DATECOLUMN = 20150130, @TIMECOLUMN = 81244;

select datetimefromparts (substring(@datecolumn, 1,4), substring(@datecolumn, 5,2), substring(@datecolumn, 7,2)
                      , cast(@timecolumn as int) / 10000, (cast(@timecolumn as int) % 10000) / 100, 
                          cast (@timecolumn as int) % 100, 0)