我无法将两列转换为一个日期时间字段。列的格式如下: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
答案 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)