将日期字符串(以不同的格式)转换为SQL Server中的数据类型

时间:2013-06-07 19:58:12

标签: sql-server sql-server-2008 sql-server-2008-r2

我有以下字符串格式的数据列

enter image description here

当我将上述内容复制并粘贴到Excel工作表中并将列更改为日期格式时,上述所有内容都将正确转换为相同的格式。 SQL服务器中是否有类似的功能?我尝试过使用CAST和CONVERT,但遇到了转换失败的错误。

后续

我发现导致标准CAST和CONVERT函数失败的值。有一些带有decimal和int值的行如下:

enter image description here

2 个答案:

答案 0 :(得分:1)

我最后写了一份CASE声明来说明不同的格式变化:

CASE
    WHEN [CommissionStart Date] LIKE '%NULL%'
    THEN '1/1/1900'
    WHEN ISDATE([CommissionStart Date]) = 1
    THEN CAST([CommissionStart Date] AS DATE)
    ELSE CONVERT(DATETIME, CAST([CommissionStart Date] AS DECIMAL(11, 5)))
END

答案 1 :(得分:0)

如果日期都是有效格式,则转换或转换应该有效。如果无法将值解析为日期,则没有神奇的修复方法。你必须找到它们并手动处理它们。 IsDate()功能可以帮助您找到它们。

select * from MyTable where IsDate(TextDateColumn) = 0

IsDate()将为4567或5456.6826等数值返回0,因此如果您有很多这样的数据,那么您还可以检查IsNumeric()

select * from MyTable where IsDate(TextDateColumn) = 0 and IsNumeric(TextDateColumn) = 0

这应该允许您识别导致转换错误的不可解析日期。