我有以下字符串格式的数据列
当我将上述内容复制并粘贴到Excel工作表中并将列更改为日期格式时,上述所有内容都将正确转换为相同的格式。 SQL服务器中是否有类似的功能?我尝试过使用CAST和CONVERT,但遇到了转换失败的错误。
后续
我发现导致标准CAST和CONVERT函数失败的值。有一些带有decimal和int值的行如下:
答案 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
这应该允许您识别导致转换错误的不可解析日期。