我有一个数据库,其中CREATEDATE
和CREATETIME
存储在 2 个单独的属性中作为 varchars。我试图将这两个组合成一个smalldatetime
属性。
当我运行以下转换时,我收到错误:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
UPDATE UsersTemp
SET Created = CONVERT(datetime, CAST(CONVERT(date, CreateDateIMF, 102)AS varchar(50))
+ ' ' +
CASE WHEN LEN(CreateTime) = 6 THEN
Left(CreateTime, 2) + ':' + SUBSTRING(CreateTime, 2, 2)
ELSE
Left(CreateTime, 1) + ':' + SUBSTRING(CreateTime, 1, 2)
END
+ ':' + Right(CreateTime, 2), 120)
(是的,这是凌乱的 SQL,但以我可以更好地使用它的方式获取这些数据只是暂时的)
在使用整套设备时,我尝试了许多不同的方法,但我似乎无法让它发挥作用。
在 a 中尝试上述参数时SELECT
,日期工作正常,因此问题存在于时间字段中,但我不确定如何更正。
示例原始数据:
CREATEDATEIMF
20120220
20040415
20040415
20040415
20040415
20040415
20040415
20040415
20040415
20050510
CREATETIME
160401
142304
142304
142304
142304
142304
142304
142304
142304
44427
我已经确认时间是 HMMSS。(请注意,在短时间内没有前导 0)
此数据是来自旧 COBOL 程序的转储。