(1)文字列列に日時データを格納するのをやめてください! これは何も、問題ではありません。
(2) なぜあなたの列は有効でさえない 2 つの異なる文字列形式でデータを取得するのですか? 文字列が 24 時間制を使用し、 AM/PM 接尾辞が付いているのはなぜですか? なぜ地域の文字列形式と Y2K 災害のようなものを使用するの29-JAN-10
ですか?
これが1つの方法ですが、それはひどく醜いです。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;