2013-06-19 48 views
1

我在tbMyTable中有一个列startDate,它被错误地设置为varchar。本专栏中的大部分数据都很好,但使用多种日期时间格式。表格的几行在列中只有垃圾。使用多种格式时,将varchar列转换为datetime

请帮我写一个sql脚本,它将varchar(50)中的列转换为可以为空的DateTime - 保存可转换的数据并将坏数据设置为null。

+1

什么版本的SQL Server?什么格式?如果将'dd/mm/yyyy'和'mm/dd/yyyy'混合在一起,这实际上并不可行。 –

+0

你在说多少数据?导出表格,使用适当的脚本语言进行处理并再次导入它可能是有意义的。 – marceljg

回答

2

检查这个T-SQL脚本(其作品具有不同的字符串格式日期):

SELECT CASE WHEN ISDATE(a.field) = 1 THEN CONVERT (DATETIME, a.field, 101) ELSE NULL END field 
FROM (
    SELECT '2012-06-06' as field 
    UNION 
    SELECT null as field 
    UNION 
    SELECT '2012-06-06asdad' as field 
    UNION 
    SELECT '2012/06/06' as field 
) a 

对于CONVERT功能检查这个LINK的更多信息。功能ISDATE在有效日期时返回1。