-1

我有一列数据采用以下字符串格式

在此处输入图像描述

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

跟进

我发现导致标准 CAST 和 CONVERT 函数失败的值。有一些行具有十进制和整数值,如下所示:

在此处输入图像描述

4

2 回答 2

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
于 2013-06-10T14:44:36.723 回答
0

如果日期都采用有效格式,则 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

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

于 2013-06-07T20:04:49.790 回答