(1)停止在字符串列中存储日期时间数据!这没什么,没什么,只有麻烦。
(2) 为什么您的列会以两种甚至无效的不同字符串格式获取数据?为什么字符串使用 24 小时制并带有 AM/PM 后缀?为什么要使用区域字符串格式和 Y2K 灾难之类的29-JAN-10
?
这是一种方法,但它非常难看。我强烈建议您修复 SSIS 流程,首先为您提供有效的日期时间值,如果不是作为日期时间,至少作为有效的 ISO 字符串 ( yyyy-mm-ddThh:mm:ss.nnn
):
DECLARE @x TABLE (d CHAR(30));
INSERT @x SELECT '2006-04-25T15:50:59.997000 PM'
UNION ALL SELECT '29-JAN-10 08.57.41.000000 PM';
SET LANGUAGE ENGLISH; -- this is important, else style 6 may not work
SELECT
CASE WHEN d LIKE '__[0-9]%' THEN
CONVERT(DATETIME, LEFT(d, 23))
WHEN d LIKE '[0-9][0-9]-%' THEN
CONVERT(DATETIME, CONVERT(CHAR(8),
CONVERT(DATETIME,REPLACE(LEFT(d,9),' ','-'),6),112)
+ ' ' + REPLACE(SUBSTRING(d,11,8),'.',':')
+ ' ' + RIGHT(RTRIM(d),2))
END
FROM @x;