我有一列数据采用以下字符串格式
当我将以上内容复制并粘贴到 Excel 工作表中并将列更改为日期格式时,以上所有内容都将正确转换为相同的格式。SQL Server 中是否有类似的功能?我尝试过使用 CAST 和 CONVERT,但遇到了转换失败的错误。
跟进
我发现导致标准 CAST 和 CONVERT 函数失败的值。有一些行具有十进制和整数值,如下所示:
我有一列数据采用以下字符串格式
当我将以上内容复制并粘贴到 Excel 工作表中并将列更改为日期格式时,以上所有内容都将正确转换为相同的格式。SQL Server 中是否有类似的功能?我尝试过使用 CAST 和 CONVERT,但遇到了转换失败的错误。
跟进
我发现导致标准 CAST 和 CONVERT 函数失败的值。有一些行具有十进制和整数值,如下所示:
我最终写了一个 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
如果日期都采用有效格式,则 Cast 或 Convert 应该可以工作。如果无法将值解析为日期,则没有神奇的修复方法。您必须找到它们并手动处理它们。该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
这应该允许您识别导致转换错误的无法解析的日期。