编辑:查看Oleg和Gordon的解决方案。我实际上更喜欢它们而不是我自己的(因为它很复杂)。
您需要从中获取日期格式...
'Wed, 19 Jul 2017 16:23:38 +0000'
……到这……
'19 Jul 2017 16:23:38'
LEFT您可以使用and删除开头和结尾的字符RIGHT。从末尾删除最后 6 个将如下所示:
LEFT([date], LEN[date] - 6)
我们可以使用相同的语法RIGHT()来删除前 5 个,但[date]现在必须用上面的整个字符串替换:
-- RIGHT([date], LEN([date]) - 5) becomes...
RIGHT(LEFT(@d, LEN(@d) - 6), LEN(LEFT(@d, LEN(@d) - 6)) - 5)
总而言之,它很丑,但有效:
INSERT INTO feed.article(title,link,sourceID,[date])
SELECT title,link,s.sourceID,
CONVERT(DATETIME,RIGHT(LEFT([date], LEN([date]) - 6), LEN(LEFT([date], LEN([date]) - 6)) - 5),121)
FROM feed.tempXML t
JOIN feed.[source] s ON s.sourceName = t.[source]
重要说明:这是假设您的日期格式开头总是有 5 个不必要的字符,并且您的时区偏移量(+0000末尾的)总是如此0(所以我们可以简单地忽略它)。
如果您有使用时区偏移的值,则需要考虑这一点。